Phương pháp nghiên cứu
- Phương pháp tổng hợp lý thuyết: Nghiên cứu và tìm hiểu các tài liệu, ứng dụng liên quan đến các công nghệ, mô hình, lý thuyết cần thiết
Phương pháp chuyên gia là việc tham khảo ý kiến từ Thầy hướng dẫn cùng với các anh, chị và bạn bè có kinh nghiệm để nâng cao độ chính xác và tính đúng đắn của các vấn đề, nghiệp vụ liên quan đến đề tài.
- Phương pháp mô hình hóa: Mô phỏng website từ bước thiết kế cài đặt cho đến kết quả thành phẩm của website.
4 PHÂN TÍCH CÁC ỨNG DỤNG CÓ LIÊN QUAN
- Các website bán hàng phải có giao diện dễ nhìn, bắt mắt, đẹp, dễ sử dụng
- Các sản phẩm được thể hiện theo danh mục sản phẩm, từ đó khách hàng dễ dàng tìm kiếm sản phẩm mình cần
- Đều có giỏ hàng và mua hàng
5 KẾT QUẢ DỰ KIẾN ĐẠT ĐƯỢC
- Xây dựng website bán hàng đơn giản có thể hiển thị sản phẩm, dễ dàng sử dụng, và quản lý được sản phẩm, người dùng
- Thống kê được các dữ liệu, doanh số
CƠ SỞ LÝ THUYẾT
ASP.NET CORE
ASP.NET Core là một framework mã nguồn mở và đa nền tảng, lý tưởng cho việc phát triển các ứng dụng hiện đại dựa trên kết nối đám mây, bao gồm web apps, IoT và backend cho ứng dụng di động Ứng dụng ASP.NET Core có khả năng hoạt động trên NET Core hoặc trên phiên bản đầy đủ của NET Framework.
Nó được thiết kế để tối ưu hóa framework phát triển cho các ứng dụng triển khai trên đám mây hoặc chạy tại chỗ Với các thành phần theo hướng module, giải pháp này giúp giảm thiểu tài nguyên và chi phí phát triển, đồng thời duy trì tính linh hoạt trong việc xây dựng ứng dụng của bạn.
ASP.NET Core cho phép phát triển và chạy ứng dụng đa nền tảng trên Windows, Mac và Linux, đồng thời trở thành mã nguồn mở Đây là một sự thay đổi quan trọng, mở ra cơ hội mà trước đây ít lập trình viên có thể tưởng tượng Xu hướng này phản ánh sự chuyển mình của các ngôn ngữ lập trình hiện nay.
1.1.1 Hoàn cảnh ra đời của ASP.NET Core
ASP.NET ra mắt lần đầu tiên cách đây 15 năm như một phần của NET Framework, và từ đó, hàng triệu lập trình viên đã áp dụng nó để phát triển các ứng dụng web ấn tượng Trong suốt thời gian qua, Microsoft đã không ngừng cải tiến và bổ sung nhiều tính năng mới cho nền tảng này.
ASP.NET Core đã trải qua những thay đổi kiến trúc lớn, học hỏi từ các framework module hóa khác Thay vì dựa vào System.Web.dll, ASP.NET Core sử dụng một tập hợp các gói (NuGet packages), giúp tối ưu hóa ứng dụng của bạn bằng cách chỉ bao gồm những thành phần cần thiết.
1 : Asp.net Core những thay đổi lớn cho lập trình viên NET
8 gói cần thiết cho ứng dụng giúp giảm kích thước, tăng cường bảo mật, đơn giản hóa quy trình, tối ưu hóa hiệu suất và tiết kiệm chi phí cũng như thời gian trong phát triển.
Với ASP.NET Core bạn đạt được những nền tảng cải tiến dưới đây:
- Hợp nhất việc xây dựng web UI và web APIs
- Tích hợp những client-side frameworks hiện đại và những luồng phát triển
- Hệ thống cấu hình dựa trên môi trường đám mây thật sự
- Dependency Injection (DI) được xây dựng sẵn
- HTTP request được tối ưu nhẹ hơn
- Có thể host trên IIS hoặc self-host trong process của riêng bạn
- Được xây dựng trên NET Core, hỗ trợ thực sự app versioning
- Chuyển các thực thể, thành phần, module như những NuGet packages
- Những công cụ mới để đơn giản hóa quá trình phát triển web hiện đại
- Xây dựng và chạy đa nền tảng(Windows, Mac và Linux)
- Mã nguồn mở và tập trung vào cộng đồng
1.1.2 Xây dựng web UI và web API sửng dụng ASP.NET Core MVC
- Bạn có thể tạo ra các ứng dụng web có thể testing theo mô hình MVC(Model-View- Controller)
- Bạn có thể xây dựng HTTP services cái mà hỗ trợ nhiều định dạng và có đầy đủ hỗ trợ cho nội dung của dữ liệu trả về
- Razor cung cấp một ngôn ngữ hiệu quả để tạo Views
- Tag Helper cho phép code server side tham gia vào việc tạo và render phần tử HTML
- Model Binding tự động ánh xạ dữ liệu từ HTTP request tới tham số của method action
- Model Validation tự động thực hiện validate client và server
1.1.3.1 Hỗ trợ đa nền tảng
Ngày nay bạn có thể phát triển và chạy ASP.NET trên cả Windows, Mac, và Linux
Và nếu trên Windows bạn có thể thể sử dụng công cụ tốt nhất Visual Studio 2015 để
Với Visual Studio Code, bạn có thể tạo, quản lý và gỡ lỗi các ứng dụng ASP.NET Core trên bất kỳ nền tảng nào Trình soạn thảo này cung cấp các plugin hỗ trợ, giúp bạn dễ dàng chỉnh sửa ứng dụng ASP.NET Core của mình.
Hiện nay, Microsoft đã công khai mã nguồn và tài liệu ASP.NET, cho phép người dùng truy cập và tải về mã nguồn từ Github Bạn có thể tự do thay đổi mã theo ý thích và nếu có bất kỳ ý kiến cải tiến nào, hãy gửi yêu cầu đến Microsoft để được xem xét và kết hợp.
Tất cả tài liệu đều là mã nguồn mở và có sẵn trên trang docs.asp.net, nơi mỗi trang đều có chức năng “chỉnh sửa trang này”, cho phép bạn chỉnh sửa các tài liệu từ Microsoft.
1.1.3.3 Hỗ trợ đầy đủ cho framework
ASP.NET Core đã trở thành mã nguồn mở, tuy nhiên Microsoft vẫn cam kết cung cấp hỗ trợ trong 3 năm cho mỗi phiên bản lớn và nhỏ của nền tảng này.
Microsoft has introduced the new Kestrel web server, which can operate within your IIS host or run behind another host process Currently, Kestrel is recognized as the fastest NET server available.
1.1.3.5 Hỗ trợ xây dựng bằng Dependency Injection
ASP.NET Core được xây dựng dựa trên Dependency Injection, một mẫu thiết kế cho phép các phụ thuộc của lớp được tiêm vào như các đối tượng cần thiết trong ứng dụng Microsoft đã cung cấp một hệ thống Dependency Injection trong ASP.NET Core, giúp bạn xác định các phụ thuộc được đưa vào Controller, View, hoặc bất kỳ lớp nào khác mà framework sẽ tạo ra.
2 : Asp.net core là gì? Giới thiệu ASP.NET Core?
10 ra cho bạn Bạn có thể bắt đầu việc cấu hình thông qua phương thức ConfigureServices trong tập tin Startup.cs
Trong ASP.NET Core, Microsoft đã hợp nhất tất cả các framework thành một framework duy nhất, nhẹ hơn và tích hợp đầy đủ tính năng của MVC và WebAPI Sự kết hợp này giúp đơn giản hóa quá trình phát triển, vì không còn cần phải cân nhắc về định tuyến, an toàn hay các bộ lọc khác nhau giữa ApiController và MVC Controller Hiện tại, tất cả các lớp Controller đều có khả năng xử lý yêu cầu thông qua API Web hoặc theo cách tiếp cận MVC.
Với ASP.NET Core, Microsoft đã giới thiệu tag helpers, cho phép tạo mã phía client từ NET và dễ dàng tái sử dụng trong Razor markup Những tag helpers này được tham chiếu trong đánh dấu phía máy chủ như các thẻ HTML thông thường, giúp Razor nhận diện và thực thi mã NET tương ứng.
1.1.4 .NET Framework , NET Core, Mono
Hình 1 1: Quy trình biên soạn code trong NET 4
Trong hình trên, phần ‘Compile time’ là quá trình ‘Build’, và ‘Runtime’ là quá trình chạy (tức là tính từ khi bạn khởi động ứng dụng của mình)
Khi thực hiện lệnh build trong Visual Studio hoặc bằng dòng lệnh 'dotnet build', mã nguồn của bạn được chuyển đổi thành ngôn ngữ trung gian MSIL (Microsoft Intermediate Language) Khi ứng dụng khởi chạy, thành phần Runtime, hay CLR (common language runtime) trong NET, sẽ dịch mã MSIL thành mã máy (Native code) để máy tính có thể thực thi Quá trình này được gọi là biên dịch JIT (just-in-time compilation) và cách biên soạn cũng như vận hành của NET tương tự như Java.
4 : [Giới thiệu NET core và ASP.NET core]Phần 2:Phân biệt NET Framework, NET Core và Mono
12 Để hiểu rõ hơn về JIT, chúng ta hãy thử làm một thí nghiệm Copy đoạn code sau vào file Program.cs trong project của bạn:
ENTITY FRAMEWORK CORE
1.2.1 Expression, IModel (Metadata): Linh hồn của Entity Framework
Trước khi tìm hiểu EF, chúng ta phải hiểu về vai trò và chức năng của Expression và Metadata trong EF
Trước khi ORM ra đời, ứng dụng của chúng ta sử dụng các lớp để mô hình hóa đối tượng và bảng để định nghĩa dữ liệu trong cơ sở dữ liệu Khi đó, cần viết các phần trung gian như ADO.NET để chuyển đổi giữa các đối tượng Câu hỏi đặt ra là liệu có cách nào để viết câu lệnh truy vấn trên các lớp và sau đó chuyển đổi chúng thành câu lệnh truy vấn trong cơ sở dữ liệu hay không?
- Chuyển đổi Expression thành các câu lệnh SQL?
6 : Giới thiệu NET core và ASP.NET core, Phần 2
16 Để hiện thực ý thứ nhất, NET sử dụng Expression Tree (abstract syntax tree, Expression Tree, hay chúng thường gọi là Linq)
Ví dụ: Product.Where(x => x.Title.CompareTo(‘Book’) > 0) Sẽ được phân rã thành Expression Tree như sau:
Để chuyển đổi Expression thành câu truy vấn trong CSDL, NET sử dụng Metadata, là tập hợp các đặc tả mô tả mối quan hệ giữa các class và table, cũng như giữa các property và column Metadata cần thiết vì tên bảng và column trong CSDL có thể không trùng với tên class và property trong NET, đồng thời các data type cũng không giống nhau giữa hai nền tảng này.
Ngoài ra, thì nó còn giúp cho EF có thể được áp dụng được với nhiều hệ CSDL khác nhau như MySQL, SQL Server,…
Về cơ bản Metadata(Entity Data Model) chứa ba thành phần chính:
- CSDL: lưu trữ đặc tả entity class, property
- MSL: mô tả mối quan hệ giữa các đối tượng trong CSDL với SSDL
- SSDL: lưu trữ thông tin về database, table, column, datatype của database
7 : Entity Framework Core 2.0: Những điều bên trong bộ mã nguồn mở EF Core 2.0
- Trong EF6, chúng có thể được gọi là DataSpace, tương ứng với: C-Space, CS- Space và S-Space
Hình 1 5: Kiến trúc Entity Framework 8
Expression và Metadata là hai yếu tố quan trọng không thể thiếu trong Entity Framework, được xem như linh hồn của nó Mục tiêu chính của Entity Framework là thực thi các Expression, trong khi Metadata cung cấp thông tin bổ trợ cần thiết để chuyển đổi Expression thành câu lệnh SQL.
Entity Framework Core là phiên bản cải tiến và hiện đại hơn của Entity Framework, kế thừa từ EF 6.x Đây là một công nghệ mã nguồn mở, nhẹ và có khả năng mở rộng, đồng thời hỗ trợ đa nền tảng cho việc truy cập dữ liệu.
EF Core được sử dụng với các ứng dụng NET Core Tuy nhiên, nó cũng có thể được sử dụng với các ứng dụng dựa trên Framework 4.5
8 : Entity Framework Core 2.0: Những điều bên trong bộ mã nguồn mở EF Core 2.0
Hình 1 6: Hai cách tiếp cận của EF Core 9
EF Core bao gồm toàn bộ những đặc trưng ở EF6 Tuy nhiên, những đặc trưng sau ở EF6 sẽ không được hỗ trợ trên EF Core:
- EDMX/ Graphical Visualization of Model
- Entity Data Model Wizard (for DB-First approach)
- Inheritance: Table per type (TPT)
- Inheritance: Table per concrete class (TPC)
- Many-to-Many without join entity
- Lazy loading of related data
- Stored procedure mapping with DbContext for CUD operation
9 : Entity Framework Tutorial: Entity Framework Core
EF Core được nâng cấp với những thứ sau:
- Batch INSERT, UPDATE, and DELETE operations
- In-memory provider for testing
- Support for IoC (Inversion of Control)
- Better patterns for handling disconnected entity graphs
ASP.NET MVC
ASP.NET MVC là một framework mạnh mẽ hỗ trợ mô hình MVC cho ASP.NET Để hiểu cách thức hoạt động của ASP.NET MVC, bạn cần nắm vững khái niệm mô hình MVC, bao gồm ba thành phần chính: Model (dữ liệu), View (giao diện người dùng) và Controller (xử lý logic) Mô hình này giúp phân chia ứng dụng thành các phần rõ ràng, tạo điều kiện thuận lợi cho việc phát triển và bảo trì.
Mô hình lưu trữ dữ liệu và trạng thái của ứng dụng, có thể là một cơ sở dữ liệu hoặc đơn giản là một tệp XML.
View là giao diện người dùng cho phép khách truy cập trang web của bạn xem dữ liệu Trong các ứng dụng ASP.NET MVC, các trang ASPX thường được sử dụng để hiển thị view.
10 : ASP NET MVC - Phần 1: Tạo ứng dụng ASP NET MVC đầu tiên
- Controller chịu trách nhiệm xử lý các tương tác của người dùng với trang web
Nó được sử dụng để xác định loại view nào cần phải được hiển thị Controller cũng được sử dụng cho mục đích giao tiếp với model
This lightweight framework offers testing capabilities and integrates seamlessly with existing ASP.NET features, including membership-based authentication and master pages.
Hình 1 7: Mô hình Model-View-Controller 11
Các đối tượng Model trong ứng dụng đóng vai trò quan trọng trong việc thiết lập logic dữ liệu Chúng thường đảm nhận nhiệm vụ lấy và lưu trữ trạng thái của model trong cơ sở dữ liệu (CSDL) Chẳng hạn, một đối tượng Product (sản phẩm) sẽ truy xuất dữ liệu từ CSDL, thực hiện các thao tác cần thiết và sau đó cập nhật lại thông tin vào bảng Products trong SQL Server.
Views là các thành phần hiển thị giao diện người dùng (UI) và thường được tạo ra dựa trên thông tin từ model Chẳng hạn, khi cập nhật bảng Products, view sẽ hiển thị các hộp văn bản, danh sách thả xuống và các ô kiểm dựa trên trạng thái hiện tại của đối tượng Product.
11 : Tổng quan về ASP.NET MVC
Controller là thành phần quản lý tương tác người dùng trong ứng dụng MVC, chịu trách nhiệm xử lý dữ liệu người dùng và chọn view để hiển thị giao diện Trong khi view chỉ hiển thị thông tin, controller quản lý và phản hồi các tương tác của người dùng, như việc xử lý các giá trị được gửi lên từ người dùng (query-string values) và chuyển chúng đến model Model sau đó sẽ truy xuất dữ liệu từ cơ sở dữ liệu dựa trên các giá trị này.
MVC giúp phân tách rõ ràng các khía cạnh của ứng dụng, bao gồm logic nhập liệu, logic xử lý tác vụ và logic giao diện Theo mô hình MVC, logic giao diện thuộc về views, logic nhập liệu thuộc về controller, và logic tác vụ (hay còn gọi là business logic) thuộc về model, nhằm tối ưu hóa cấu trúc và quản lý ứng dụng hiệu quả.
Việc phân chia ứng dụng giúp giảm bớt sự phức tạp, cho phép bạn chỉ tập trung vào từng khía cạnh cần thiết tại mỗi thời điểm Chẳng hạn, bạn có thể chỉ chú trọng vào giao diện (views) mà không cần bận tâm đến logic xử lý thông tin của ứng dụng.
- Dễ dàng quản lý sự phức tạp của ứng dụng bằng cách chia ứng dụng thành ba thành phần model, view, controller
- Nó không sử dụng view state hoặc server-based form Điều này tốt cho những lập trình viên muốn quản lý hết các khía cạnh của một ứng dụng
Mẫu Front Controller cho phép quản lý tất cả các yêu cầu thông qua một Controller duy nhất, giúp bạn dễ dàng thiết kế hạ tầng quản lý định tuyến hiệu quả.
- Hỗ trợ tốt hơn cho mô hình phát triển ứng dụng hướng kiểm thử (TDD)
Hỗ trợ hiệu quả cho các ứng dụng phát triển bởi đội ngũ lập trình viên và thiết kế đông đảo, đồng thời vẫn đảm bảo quản lý tốt các tính năng của ứng dụng.
Tách bạch các tác vụ của ứng dụng thành ba phần: logic nhập liệu, business logic và logic giao diện, giúp dễ dàng kiểm thử và áp dụng phương pháp phát triển TDD một cách hiệu quả.
Mô hình MVC trong ứng dụng sử dụng interface và cho phép kiểm thử thông qua các đối tượng mocks, giúp mô phỏng tính năng của các đối tượng thực Việc này cho phép thực hiện unit-test mà không cần phải chạy controller trong tiến trình ASP.NET, mang lại sự nhanh chóng và tiện lợi cho quá trình kiểm thử Bạn có thể áp dụng bất kỳ nền tảng unit-testing nào tương thích với NET để thực hiện kiểm thử hiệu quả.
ASP.NET MVC là một nền tảng linh hoạt, cho phép mở rộng và tùy chỉnh dễ dàng Các thành phần của nó được thiết kế để có thể thay thế hoặc điều chỉnh, bao gồm view engine, cơ chế định tuyến URL và cách kết xuất tham số của action-method Ngoài ra, ASP.NET MVC hỗ trợ Dependency Injection (DI) và Inversion of Control (IoC), giúp gắn kết các đối tượng vào lớp mà không cần khởi tạo trực tiếp IoC cho phép các đối tượng lấy các phụ thuộc từ nguồn bên ngoài, như tập tin cấu hình, tạo điều kiện cho việc quản lý và bảo trì mã nguồn hiệu quả hơn.
DI và IoC sẽ giúp kiểm thử dễ dàng hơn
ASP.NET MVC cung cấp một thành phần ánh xạ URL mạnh mẽ, giúp bạn tạo ra các ứng dụng với địa chỉ URL ngắn gọn và dễ tìm kiếm Các URL này không cần phần mở rộng của tên tập tin, được thiết kế để tối ưu hóa tìm kiếm và phù hợp với lập địa chỉ theo kiểu REST.
RAZOR VIEW ENGINE
Theo ScottGu 12 , Razor là một view engine:
Razor mang đến sự gọn gàng, biểu cảm và linh hoạt trong việc viết mã Với việc giới hạn số lượng ký tự trong một tập tin, việc lập trình trở nên nhanh chóng và rõ ràng hơn Khác với nhiều loại cú pháp truyền thống, Razor không yêu cầu bạn phải chỉ định rõ ràng khối mã server trong văn bản HTML, vì bộ phân tích Razor có khả năng tự suy luận điều này.
- Is not a new language: Razor chỉ sử dụng cú pháp C#/VB (hoặc các ngôn ngữ khác) kết hợp với HTML
- Works with any Text Editor
- Has great Intellisense: Visual Studio 2010 và Visual Web Developer 2010 hỗ trợ đầy đủ tính năng intellsense cho Razor
Razor supports unit testing for views without the need for controllers or a web server, allowing them to be hosted in any unit test project.
DEPENDENCY INJECTION
SOLID là các nguyên lý thiết kế quan trọng trong lập trình hướng đối tượng (OOP), được hình thành từ kinh nghiệm thực tiễn của nhiều lập trình viên qua hàng ngàn dự án thành công và thất bại Việc áp dụng các nguyên lý SOLID giúp mã nguồn trở nên dễ đọc, dễ kiểm thử và rõ ràng hơn, đồng thời cải thiện khả năng bảo trì mã (maintenance), bao gồm việc thêm bớt chức năng và sửa lỗi SOLID bao gồm 5 nguyên tắc cơ bản.
Nguyên lý đầu tiên trong SOLID, ký hiệu là S, nhấn mạnh rằng mỗi lớp (class) chỉ nên đảm nhận một trách nhiệm duy nhất Điều này có nghĩa là một lớp chỉ nên được sửa đổi vì một lý do duy nhất, giúp tăng cường tính linh hoạt và khả năng bảo trì của mã nguồn.
12 : ASP.NET MVC – Bảng Razor Syntax Reference (gồm Razor v2)
13 : DEPENDENCY INJECTION VÀ INVERSION OF CONTROL – Phần 1,2,3
24 Để hiểu nguyên lý này, ta hãy lấy ví dụ với 1 class vi phạm nguyên lý Ta có 1 class như sau:
Lớp này đảm nhiệm ba trách nhiệm chính: đọc dữ liệu từ cơ sở dữ liệu (DB), xử lý dữ liệu và in kết quả Vì vậy, khi thay đổi DB hoặc phương thức xuất kết quả, lớp này sẽ cần được điều chỉnh Theo thời gian, lớp này có thể trở nên phức tạp và cồng kềnh hơn.
Theo nguyên lý thiết kế, nên tách lớp này thành ba lớp riêng biệt Mặc dù số lượng lớp tăng lên, nhưng việc sửa chữa sẽ trở nên đơn giản hơn Các lớp ngắn hơn cũng giúp giảm thiểu lỗi phát sinh.
Nguyên lý thứ hai trong SOLID, được biểu thị bằng chữ O, nhấn mạnh rằng việc mở rộng một lớp (class) là hoàn toàn khả thi, tuy nhiên, không được phép sửa đổi nội dung bên trong lớp đó Điều này giúp duy trì tính ổn định và bảo trì của mã nguồn, đồng thời đảm bảo rằng các thay đổi không ảnh hưởng đến các phần khác của hệ thống.
Theo nguyên lý này, khi cần thêm chức năng cho chương trình, chúng ta nên tạo một lớp mới để mở rộng lớp cũ thông qua kế thừa hoặc sở hữu, thay vì sửa đổi lớp cũ.
Nguyên lý thứ ba trong SOLID, được biểu thị bằng chữ L, nhấn mạnh rằng các đối tượng của lớp con có thể thay thế lớp cha trong một chương trình mà không làm ảnh hưởng đến tính đúng đắn của chương trình Điều này đảm bảo tính linh hoạt và khả năng mở rộng trong thiết kế phần mềm.
Trong lập trình hướng đối tượng, việc kế thừa từ một lớp cha, như lớp Vit, thường diễn ra suôn sẻ với các lớp con như VitBau và VitXiem Tuy nhiên, nếu ta tạo lớp VitChayPin mà yêu cầu phải có pin để hoạt động, việc kế thừa từ lớp Vit mà không có pin sẽ dẫn đến lỗi, vi phạm nguyên lý kế thừa Điều này nhấn mạnh tầm quan trọng của việc đảm bảo các lớp con có thể hoạt động độc lập mà không gặp phải vấn đề từ lớp cha.
1.5.1.4 Interface segregation principle public class ReportManager()
{ public void ReadDataFromDB(); public void ProcessData(); public void PrintReport();
Nguyên lý thứ tư trong SOLID, tương ứng với chữ I, nhấn mạnh rằng thay vì sử dụng một interface lớn, chúng ta nên chia nhỏ thành nhiều interface nhỏ hơn, mỗi cái phục vụ cho những mục đích cụ thể Việc này giúp cải thiện tính linh hoạt và khả năng bảo trì của mã nguồn.
Khi làm việc với một interface lớn chứa khoảng 100 phương thức, việc triển khai trở nên khó khăn và có thể dẫn đến sự dư thừa, vì một lớp không cần sử dụng tất cả các phương thức này Bằng cách tách interface thành nhiều interface nhỏ hơn với các phương thức liên quan, quá trình triển khai và quản lý sẽ trở nên dễ dàng hơn.
Nguyên lý cuối cùng trong SOLID, được biểu thị bởi chữ D, nhấn mạnh rằng các module cấp cao không nên phụ thuộc vào các module cấp thấp; thay vào đó, cả hai nên dựa vào các trừu tượng Điều này có nghĩa là interface (trừu tượng) không nên phụ thuộc vào các chi tiết cụ thể, mà ngược lại, các chi tiết nên phụ thuộc vào interface.
Nguyên lý này có thể được minh họa qua ví dụ về hai loại đèn: đèn tròn và đèn huỳnh quang Cả hai đều có đuôi tròn, cho phép chúng ta dễ dàng thay thế lẫn nhau Trong trường hợp này, interface được xem là đuôi tròn, trong khi implementation là các loại bóng đèn Việc hoán đổi giữa hai loại bóng đèn diễn ra thuận lợi vì ổ điện chỉ quan tâm đến interface (đuôi tròn) mà không để ý đến implementation.
In coding, applying the Dependency Inversion principle allows developers to focus solely on the interface To connect to a database, one simply calls the Get and Save functions of the IDataAccess interface When changing the database, only the implementation of this interface needs to be updated.
Dependency là các module cấp thấp hoặc dịch vụ bên ngoài mà các module cấp cao gọi đến Trong lập trình thông thường, các module cấp cao phụ thuộc vào các module cấp thấp, tạo ra mối quan hệ phụ thuộc giữa chúng.
Dependency Injection là một phương pháp tổ chức mã nguồn giúp "tiêm" các đối tượng phụ thuộc vào đối tượng chính, nhằm giảm sự phụ thuộc giữa các đối tượng trong mối quan hệ của chúng Đây là một mẫu thiết kế (design pattern) phổ biến, được sử dụng để tăng cường tính linh hoạt và khả năng bảo trì của ứng dụng.
Các phương pháp cơ bản để Dependency Injection:
- Constructor Injection: Các dependency sẽ được truyền vào (inject vào) 1 class thông qua constructor của class đó Đây là cách thông dụng nhất
- Setter Injection: Các dependency sẽ được truyền vào 1 class thông qua các hàm Setter
- Public fields: Các dependency sẽ được truyền vào 1 class một cách trực tiếp vào các public field Cách này ít được sử dụng nhất Ưu điểm Nhược điểm
14 : DEPENDENCY INJECTION VÀ INVERSION OF CONTROL – Phần 1,2,3
- Giảm sự kết dính giữa các module
- Code dễ bảo trì, dễ thay thế module
- Rất dễ test và viết Unit Test
- Dễ dàng thấy quan hệ giữa các module (Vì các dependecy đều được inject vào constructor)
- Khái niệm DI khá khó hiểu, các developer mới sẽ gặp khó khăn khi học
- Sử dụng interface nên đôi khi sẽ khó debug, do không biết chính xác module nào được gọi
- Các object được khởi tạo toàn bộ ngay từ đầu, có thể làm giảm performance
- Làm tăng độ phức tạp của code
REPOSITORY & UNIT OF WORK PATTERNS
Repository là một mẫu thiết kế tạo ra lớp trừu tượng giữa lớp dữ liệu và lớp nghiệp vụ, giúp quản lý các phương thức tương tác với dữ liệu mà không làm ảnh hưởng đến logic kinh doanh Mục tiêu của lớp này là cách ly việc truy cập dữ liệu, đảm bảo rằng các thay đổi không tác động trực tiếp đến lớp nghiệp vụ Kỹ thuật Unit of Work được sử dụng để đảm bảo tất cả các yêu cầu liên quan đến cơ sở dữ liệu được thực hiện trong cùng một DbContext, tăng cường tính nhất quán và hiệu quả trong quản lý giao dịch.
Hình 1 9: Repository & Unit of Work 15
1.6.2 DbContext của Entity Framework Core
DbContext là một thực thể đại diện cho phiên làm việc với cơ sở dữ liệu, giúp bạn truy vấn và lưu trữ dữ liệu Trong ASP.NET, mỗi khi có yêu cầu mới từ trình duyệt, một DbContext mới sẽ được tạo ra và sẽ bị hủy khi trả về phản hồi Thông thường, bạn sẽ kế thừa DbContext và thêm các DbSet để thực hiện truy vấn Để đảm bảo tính toàn vẹn dữ liệu, DbContext sử dụng cơ chế tracking, theo dõi sự thay đổi của các bản ghi (thêm, xóa, sửa) mà không gửi ngay xuống cơ sở dữ liệu Chỉ khi bạn gọi yourDbContext.SaveChanges(), các thay đổi được theo dõi mới được cập nhật vào cơ sở dữ liệu.
The concepts of Repository and Unit of Work are closely related to DbContext, which serves as an implementation of both patterns While DbContext is integrated within the framework, your own implementation will reside within your application.
15 : Repository Pattern và Unit of Work với Entity Framework trong ASP.NET MVC
Repository đóng vai trò là 1 lớp trung gian giữa Bussiness Logic Layer (controllers và services) và Data Access Layer (các DbContext)
- Tách việc xử lý logic và việc truy cập database:
Dễ thay đổi logic hoặc database
- Gom chung nhìu tác vụ cơ bản về 1 chỗ, không phải viết đi viết lại 1 tác vụ nhiều lần
Unit of Work có nhiệm vụ chính là đảm bảo tất cả các repository sử dụng chung một DbContext Điều này giúp quản lý các tác vụ một cách đồng bộ và hiệu quả, đảm bảo rằng khi hoàn thành tất cả các thao tác, dữ liệu được cập nhật một cách nhất quán.
16 : Repository và Unit of Work Pattern
30 đổi database, bạn chỉ cần gọi DbContext.SaveChanges() 1 lần duy nhất, và các thay đổi đó sẽ được lưu lại trong database.
ASP.NET IDENTITY
Vào những năm 2000, nhu cầu rõ rệt về websites phải có đăng nhập, đăng ký thành viên Do vậy Microsoft đã cho ra đời ASP.NET Membership
Phiên bản này có nhiều hạn chế, với Database được thiết kế riêng cho SQL Server và không thể thay đổi Mặc dù các provider có thể được điều chỉnh, nhưng việc thay đổi trở nên khó khăn do nhiều đoạn mã hardcode và tư duy bắt buộc sử dụng SQL Server của lập trình viên, dẫn đến việc không thể áp dụng OWIN một cách hiệu quả.
Đến năm 2010, khi WebMatrix đang trở nên phổ biến, Microsoft đã phát hành một phiên bản rút gọn và cải tiến của Membership mang tên Simple Membership Mục tiêu của Simple Membership là giúp việc thêm chức năng thành viên vào ứng dụng web trở nên dễ dàng hơn Mặc dù Simple Membership đã cải thiện khả năng tùy chỉnh thông tin hồ sơ người dùng, nhưng nó vẫn gặp phải một số vấn đề tương tự như ASP.NET Membership và vẫn tồn tại một số hạn chế.
ASP.NET Identity là công nghệ mới hơn so với ASP.NET Membership, cung cấp giải pháp hiệu quả cho việc xác thực và phân quyền người dùng trên website Công nghệ này khắc phục những hạn chế của ASP.NET Membership và bổ sung nhiều tính năng hiện đại, bao gồm hỗ trợ đăng nhập qua mạng xã hội, xác thực hai bước và gửi email xác nhận khi người dùng đăng ký.
SIGNALR
ASP.NET SignalR là thư viện hỗ trợ lập trình viên Asp.Net trong việc tích hợp chức năng web real-time vào ứng dụng Chức năng web real-time cho phép server gửi nội dung đến client đã kết nối ngay lập tức, khác với giao thức HTTP truyền thống, nơi server phải chờ yêu cầu từ client.
SignalR can handle 31 client connections and return corresponding content, making it suitable for any real-time web functionality A prime example of its application is in web chat systems.
SignalR offers a straightforward API for implementing server-to-client remote procedure calls (RPC), enabling NET server-side code to invoke JavaScript functions in browsers and other platforms Additionally, SignalR includes APIs for managing connection events, such as connect and disconnect, as well as handling group connections.
Hình 1 11: Kết nối giữa client và server thông qua Hub
SignalR tự động quản lý kết nối, cho phép bạn truyền thông điệp đến tất cả các client đã kết nối đồng loạt, tương tự như một phòng chat Ngoài ra, bạn cũng có thể gửi thông điệp tới các client cụ thể Kết nối giữa client và server được duy trì một cách hiệu quả.
32 là liên tục, không giống như kết nối HTTP cổ điển, cái mà sẽ thành lập lại kết nối cho mỗi lần giao tiếp
SignalR API chứa hai chế độ cho việc giao tiếp giữa client và server: Persistent Connection và Hubs
Một Hub là một thành phần cao cấp được xây dựng dựa trên Connection API, cho phép client và server gọi trực tiếp các phương thức của nhau SignalR xử lý việc điều phối qua biên giới máy một cách dễ dàng, giúp clients gọi các phương thức trên server như thể chúng là các phương thức cục bộ Việc sử dụng chế độ giao tiếp Hubs rất quen thuộc với lập trình viên đã từng làm việc với các APIs triệu gọi từ xa như Net Remoting Bên cạnh đó, Hub cũng hỗ trợ truyền các tham số kiểu mạnh đến các phương thức, cho phép thực hiện model binding hiệu quả.
Khi mã trên server gọi một phương thức ở client, một gói thông tin chứa tên và các tham số của phương thức đó sẽ được gửi qua truyền tải Nếu một đối tượng được gửi như tham số, nó sẽ được tuần tự hóa bằng JSON Sau đó, client sẽ tìm kiếm tên phương thức trong các phương thức đã được định nghĩa trong mã của client Nếu tìm thấy sự trùng khớp, phương thức trên client sẽ thực hiện với dữ liệu tham số đã được giải tuần tự.
1.8.3 Chọn một chế độ giao tiếp
Hầu hết các ứng dụng nên dùng Hubs API Connection API có thể được sử dụng trong các trường hợp sau đây:
- Định dạng của thông điệp thực sự gửi cần được chỉ định
- Lập trình viên thích làm việc với mô hình messaging và dispatching hơn là mô hình truy cập từ xa
- Ứng dụng hiện có mà sử dụng mô hình messaging đang được chuyển qua sử dụng SignalR
KHẢO SÁT HIỆN TRẠNG VÀ XÁC ĐỊNH YÊU CẦU
THAM KHẢO CÁC WEBSITE LIÊN QUAN
Trang chủ: https://shopee.vn/:
Website thương mại điện tử đang ngày càng phổ biến, cung cấp đa dạng sản phẩm và nhiều chức năng hữu ích như mua bán, giao tiếp, đánh giá và xếp hạng Điều này giúp người dùng dễ dàng chọn lựa và mua sắm những mặt hàng cần thiết Đặc biệt, các sự kiện giảm giá thường xuyên trên website thu hút sự quan tâm của khách hàng.
- Giao diện đẹp, dễ nhìn
- UI/UX dễ sử dụng, phù hợp với cả người không rành Internet
- View thể hiện đầy đủ các chi tiết quan trọng ( số lượng, giá cả, giảm giá,…)
- Có chức năng theo dỏi đơn hàng đã đặt rất hữu dụng
- Có thể chat với người bán hàng, bình luận & đánh giá
Kết: Giao diện rất đẹp, dễ thu hút người sử dụng UI/UX dễ sử dụng
Chợ Tốt - Nền tảng thương mại điện tử hàng đầu tại Việt Nam, ra mắt vào năm 2012, nhằm kết nối người mua và người bán một cách dễ dàng và nhanh chóng Với hàng ngàn sản phẩm đa dạng từ bất động sản, xe cộ, đồ điện tử đến đồ dùng cá nhân và thú cưng, Chợ Tốt cung cấp một kênh rao vặt tiện lợi Người dùng có thể đăng tin miễn phí và tìm kiếm sản phẩm với giá cả hợp lý Tuy nhiên, người dùng cần lưu ý về độ tin cậy của các giao dịch trên nền tảng này Chợ Tốt cũng hỗ trợ thông tin giá cả và chia sẻ kinh nghiệm để đảm bảo giao dịch an toàn và hiệu quả.
Hình 2 2: Giao diện Chợ Tốt
- UX/UI rất dễ sử dụng
- Không trợ thanh toán, chỉ là trang hỗ trợ, tìm kiếm giữa người mua với người bán
- Độ tin cậy không cao
Kết: Giao diện đẹp, dễ sử dụng Nhưng không tiện dụng, tin cậy ( không thanh toán)
Trang chủ: https://tiki.vn/
Tiki hiện nay là một trong những "ông trùm" thương mại điện tử tại Việt Nam, nổi bật với nhiều chức năng hấp dẫn ngoài việc mua-bán sản phẩm Website không chỉ cung cấp các trò chơi và sự kiện thú vị mà còn có nhiều ưu đãi hấp dẫn cho người dùng Với giao diện bắt mắt và trải nghiệm người dùng (UI/UX) dễ sử dụng, Tiki xứng đáng nằm trong top những website thương mại điện tử hàng đầu Việt Nam.
- Giao diện dễ nhìn, đẹp
- Có nhiều trò chơi, sự kiện để săn mã giảm giá
- Trang thể hiện đầy đủ các thông tin cần thiết, hữu ích
- Có bình luận, đánh giá, chat
- Có sự kiểm duyệt từ Nhà phát triển, đảm bảo độ an toàn của sản phẩm
- Độ tin cậy của website cao
Kết: Giao diện rất đẹp, dễ sử dụng UI/UX dễ sử dụng Chức năng rất tốt
Trang chủ:https://www.lazada.vn/
Lazada là đối thủ hàng đầu của Tiki, cung cấp nhiều chức năng tương tự và sở hữu một loạt sản phẩm đa dạng, phong phú.
- Giao diện đẹp, bắt mắt, bố cục rõ rang, thể hiện đầy đủ các thông tin của sản phẩm
- Thao tác mua hàng thân thiện, tính tiện dụng cao
- Dễ dàng tìm kiếm các sản phẩm theo danh mục
- Hình ảnh các sản phẩm chân thực
- Có các tính năng đánh giá, bình luận, chat trực tuyến
- Có sự kiểm duyệt đảm bảo độ tin cậy của sản phẩm
Kết: Giao diện rất đẹp, dễ sử dụng UI/UX dễ sử dụng
Trang chủ của Amazon là một nền tảng thương mại điện tử đa quốc gia, cung cấp một loạt sản phẩm phong phú từ khắp nơi trên thế giới Đây là một nguồn tài nguyên quý giá cho những ai muốn xây dựng một website bán hàng hoàn chỉnh.
- Bố cục trang web hợp lý, theo từng loại sản phẩm giúp người tiêu dùng dễ dàng xem
- Đủ các thể loại sản phẩm, trang mua bán trực tuyến lớn nhât
- Thao tác tìm kiếm và mua hàng thể hiện rõ tính tiện dụng
- Có tính năng đánh giá, bình luân
- Sản phẩm được kiểm duyệt để đảm bảo độ tin cậy
Kết: Giao diện đẹp, dễ sử dụng, tiện lợi và đơn giản
PHÂN TÍCH HIỆN TRẠNG
Phạm vi: Người dùng cá nhân
Website thương mại điện tử B-2-C đóng vai trò quan trọng trong việc kết nối doanh nghiệp với người tiêu dùng, rút ngắn khoảng cách giữa người bán và người mua Nền tảng này giúp người quản trị và người bán quản lý hiệu quả hơn, đồng thời mang lại trải nghiệm mua sắm tiện lợi và dễ dàng cho người tiêu dùng Dưới đây là mô tả các nghiệp vụ hằng ngày của trang web.
Website này là một hệ thống quản lý và trình bày sản phẩm của doanh nghiệp, trong đó mỗi sản phẩm được phân loại theo danh mục riêng Mỗi sản phẩm có những đặc điểm riêng biệt như giá cả, màu sắc, kích thước và số lượng khác nhau.
Người dùng có thể tìm kiếm và xem thông tin sản phẩm trên trang web với tư cách Khách Để thuận tiện hơn, họ có thể tạo tài khoản đăng nhập, bao gồm thông tin cá nhân cần thiết và tính năng bảo mật Khi đăng nhập thành công, người dùng dễ dàng lựa chọn, lưu sản phẩm vào giỏ hàng, liên hệ với doanh nghiệp, thực hiện mua hàng, theo dõi đơn đặt hàng và đánh giá sản phẩm.
Mỗi người dùng sẽ có một giỏ hàng riêng để thuận tiện trong việc chọn lọc và mua sắm sản phẩm Ngoài ra, giỏ hàng còn cho phép lưu trữ các sản phẩm yêu thích Sau khi hoàn tất việc mua sắm, người dùng sẽ nhận được một đơn hàng (hóa đơn) để xác nhận giao dịch.
Trang web sẽ được bổ sung thêm các quản trị viên là nhân viên của doanh nghiệp, những người này sẽ chịu trách nhiệm trong việc thêm mới, kiểm soát và kiểm duyệt sản phẩm, nhằm tối ưu hóa hiệu suất hoạt động của trang web.
- Ngoài ra Website còn có chức năng thống kê để giúp các quản trị viên dễ dàng theo dỏi tình hình kinh doanh theo ngày, tháng.
MỤC TIÊU
- Tìm hiểu NET Core & Phát triển ứng dụng website bán hàng
Website cho phép người dùng đăng bán sản phẩm của mình, giúp khách hàng dễ dàng tìm kiếm và lựa chọn những sản phẩm mà họ mong muốn.
Khách hàng có thể tìm kiếm 39 sản phẩm hiển thị trên màn hình hoặc theo từ khóa mong muốn Nếu có bất kỳ thắc mắc nào về sản phẩm, họ có thể để lại bình luận hoặc nhắn tin cho người bán Sau khi đơn hàng được hoàn tất và giao tới tay khách hàng, sẽ có phần đánh giá giúp những người khác dễ dàng lựa chọn sản phẩm hơn.
- Áp dụng các kiến thức đã học ở những môn khác để thiết kế, xây dựng và hoàn thiện website.
PHÂN TÍCH YÊU CẦU
When users register an account on AspNetUsers, they provide essential information including their username, email, password hash, phone number, full name, birth date, and gender Additionally, when buying or selling a product, users must include details such as the product name, user ID, and a description of the product.
- Thông tin chi tiết sản phẩm khi đã phân loại ProductDetail: ProductId, Price, Size, Color, Quantity
- Giỏ hàng để thêm các sản phẩm ưa thích của khách hàng Cart: UserId
- Đơn hàng để lưu thông tin mua hàng của kháng hàng Order: UserId, PriceSum, Date
- Các danh mục hàng trong website Catalog: Name
- Danh sách hình ảnh để hiển thị sản phẩm Image: Url
- Tìm kiếm sản phẩm theo từ khóa ( gần đúng ), hoặc tìm kiếm chính xác sản phẩm theo tên
- Tìm kiếm tên người dùng theo từ khóa
- Tính tổng giá của đơn hảng công thức: Giá x Số lượng
- Tính tổng số lượng sản phẩm theo danh mục
- Thống kê sản phẩm đang được bán trên website
- Thống kê sản phẩm được bán trong ngày, tháng,
- Thống kế chi tiết sản phẩm theo sản phẩm
- Thống kê doanh thu theo ngày, tháng,
- Tất cả các bảng ở Lưu trữ sẽ có thêm thuộc tính là State ( mặc định = 1 ) để tương tác với Chức năng Xóa ( State = 0: Đã xóa )
- Tất cả các bảng sẽ có Id kiểu Int tăng dần, bắt đầu từ 0, bước nhảy là 1 ( Trừ bảng AspNetUser.Id là kiểu GUID)
Mối quan hệ giữa bảng Cart và bảng Product là n-n, vì vậy cần tạo ra bảng CartDetail để lưu trữ thông tin giữa hai bảng này Tương tự, mối quan hệ giữa bảng Order và bảng Product cũng dẫn đến việc phát sinh bảng OrderDetail để quản lý thông tin liên quan.
- Riêng Quản lý sản phẩm sẽ có thêm chức năng Xem lịch sử quản lý ( xem các mốc thời gian, sự thay đổi của sản phẩm)
2.4.2 Yêu cầu phi chức năng
Bảng 2 1: Bảng yêu cầu phi chức năng
STT Nội dung Tiêu chuẩn
1 Tốc độ xử lý quá trình mua hàng nhanh
Hiệu quả Một lần có thể cho nhiều tài khoản mua hàng
2 Tốc độ tìm kiếm nhanh và chính xác
Hiệu quả Tối đa 3s phải có kết quả tìm kiếm
3 Tiết kiệm được thời gian, thu hẹp không gian lưu trữ, tránh thất lạc dữ liệu
Hiệu quả Tiết kiệm thời gian so với quản lý thủ công Dữ liệu được sao lưu trên máy, có thể dễ dàng phục hồi
4 Dễ dàng quản lý người dùng, bán hàng và mua hàng
Chức năng quản lý sản phẩm giúp người dùng dễ dàng theo dõi tình hình các sản phẩm đã đăng bán, tiết kiệm thời gian và công sức.
5 Có thể thiết kế thêm theo yêu cầu của quản lý bán hàng trực tuyến
Tiến hóa Quản lý có thể yêu cầu thêm tín năng hữu ích cho chương trình quản bán hàng trực tuyến
6 Cho phép thay đổi quy định, công thức tính toán
Tiến hóa Người dùng có thể dễ dàng thay đổi quy định tính tổng tiền thanh toán khi áp dụng mã giảm giá, quy định kiểm duyệt sản phẩm
7 Giao diện thân thiện, đơn giản
Tiện dụng Khách hàng ở mọi lứa tuổi đều có thể dễ dàng sử dụng
8 Dễ thao tác Tiện dụng Các thao tác nhập xuất chỉnh sửa đơn giản, gần gũi với người dùng.
MÔ HÌNH HÓA YÊU CẦU
2.5.1 Nhận diện tác nhân và chức năng trong sơ đồ use case
Bảng 2 2: Nhận diện tác nhân và chức năng trong sơ đồ use case
Khách - Đăng nhập, đăng xuất
- Xem thông tin các sản phẩm
Người dùng - Đăng nhập, đăng xuất
- Xem thông tin các sản phẩm
- Quản lý thông tin cá nhân
Quản trị viên - Đăng nhập, đăng xuất
Hình 2 7: Usecase Quản trị viên uc Use Case User
So sanh cac san pham
Xem thong tin ca nhan
Xem tien do giao hang Mua hang
Danh gia, binh luan cac san pham
Chat truc tuyen Chinh sua thong tin ca nhan
Ban hang ôincludeằ ôextendằ ôextendằ ôextendằ uc Use Case Admin
Hình 2 8: Usecase Quản lý giỏ hàng
Hình 2 9: Usecase Quản lý sản phẩm uc Quan ly gio hang
Xoa san pham User uc Quan ly san pham
Hình 2 10: Usecase Quản lý người dùng
Hình 2 11: Usecase Thống kê uc Quan ly nguoi dung
Xoa nguoi dung Admin uc Thong ke
Thong ke san pham ban chay trong ngay
Thong ke don dat hang
Thong ke loai san pham
Thong ke doanh thu Thong ke khach hang moi
Hình 2 12: Usecase Quản lý danh mục
Bảng 2 3: Mô tả Usecase Đăng nhập Đăng nhập
Mô tả Sử dụng tài khoản đã đăng ký để đăng nhập vào website
Tác nhân kích hoạt Khách
Tiền điều kiện Người dùng truy cập vào website
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Click button Đăng nhập ở góc phải trên của website
(3) Nhập form đăng nhập: Emial/ Số điện thoại + Mật khẩu
(4) So sánh thông tin form đăng nhập với Dababase: uc Quan ly danh muc
Đúng: Chuyển đến Trang chủ
Sai/Lỗi: Thông báo “Đăng nhập thất bại”
Bảng 2 4: Mô tả Usecase Thêm sản phẩm
Mô tả Quản trị viên thêm một sản phẩm mới của mình
Tác nhân kích hoạt Quản trị viên
Tiền điều kiện Người dùng đăng nhập thành công
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Đăng nhập với quyền Admin
(3) Chọn mục Quản lý sản phẩm, sau đó chọn Thêm sản phẩm
(4) Chuyển đến trang Thêm sản phẩm mới
(5) Quản trị viên nhập các thông tin như: Danh mục sản phẩm, tên sản phẩm, mô tả sản phẩm
(6) Sau đó nhập thông tin chi tiết cho sản phẩm như: Kích thước, số lượng, màu sắc, đơn giá và chọn hình cho sản phẩm
(7) Bấm vào Thêm sản phẩm để lưu thông tin sản phẩm
Bảng 2 5: Mô tả Usecase Chỉnh sửa sản phẩm
Mô tả Quản trị viên chỉnh sửa sản phẩm đã có trong cơ sở dữ liệu
Tác nhân kích hoạt Quản trị viên
Tiền điều kiện Thông tin sản phẩm đã có trên cơ sở dữ liệu
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Đăng nhập với quyền Admin
(3) Chọn mục Quản lý sản phẩm
(4) Danh sách các sản phẩm của người dùng đã thêm trước đó sẽ được hiển thị lên màn hình
Quản trị viên có thể dễ dàng lựa chọn sản phẩm bằng cách trực tiếp từ danh sách hiển thị trên màn hình hoặc nhập thông tin vào ô tìm kiếm, sử dụng mã sản phẩm hoặc tên sản phẩm để tìm kiếm nhanh chóng.
(6) Sau khi tìm đúng sản phẩm cần chỉnh sửa, người dùng nhập lại thông tin mới
(7) Lưu thông tin mới cho sản phẩm
Bảng 2 6: Mô tả Usecase Xóa sản phẩm
Mô tả Quản trị viên xóa sản phẩm đã có trong cơ sở dữ liệu
Tác nhân kích hoạt Quản trị viên
Tiền điều kiện Thông tin sản phẩm đã có trên cơ sở dữ liệu
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Đăng nhập với quyền Admin
(3) Chọn mục Quản lý sản phẩm
(4) Danh sách các sản phẩm của người dùng đã thêm trước đó sẽ được hiển thị lên màn hình
Người dùng có thể dễ dàng tìm kiếm sản phẩm bằng cách chọn trực tiếp từ danh sách hiển thị trên màn hình hoặc nhập thông tin vào ô tìm kiếm, bao gồm mã sản phẩm hoặc tên sản phẩm.
(6) Sau khi tìm đúng sản phẩm cần xóa, người dùng nhấn nút xóa
(7) Chọn “Xác nhận” để đồng ý xóa sản phẩm
2.5.3.5 Thêm sản phẩm vào giỏ hàng
Bảng 2 7: Mô tả Usecase Thêm sản phẩm vào giỏ hàng
Thêm sản phẩm vào giỏ hàng
Mô tả Người dùng thêm một sản phẩm vào giỏ hàng
Tác nhân kích hoạt Người dùng
Tiền điều kiện Người dùng truy cập vào website
Các bước thực hiện (1) Người dùng truy cập vào website
(3) Chọn sản phẩm mình thích và nhấn vào nút Thêm vào giỏ hàng
(4) Người dùng có thể tìm kiếm sản phẩm thêm tên sản phẩm, loại sản phẩm sau đó nhấn vào Thêm vào giỏ hàng
(5) Người dùng có thể bấm vào nút Đến giỏ hàng để kiểm tra hoặc tiếp tục xem sản phẩm
Các sản phẩm đã thêm vào giỏ hàng sẽ vẫn tồn tại cho đến khi người dùng hoàn tất thanh toán hoặc xóa chúng khỏi giỏ hàng trong các lần mua sắm tiếp theo.
Bảng 2 8: Mô tả Usecase Chỉnh sửa giỏ hàng
Chỉnh sửa sản phẩm trong giỏ hàng
Mô tả Người dùng chỉnh sửa sản phẩm đã được thêm vào giỏ hàng
Tác nhân kích hoạt Người dùng
Tiền điều kiện Người dùng truy cập vào website
Các bước thực hiện (1) Người dùng truy cập vào website
(3) Nhấp chọn vào Giỏ hàng
(4) Danh sách các sản phẩm chưa được mua trong giỏ hàng của người dùng sẽ hiện ra
(5) Người dùng có thể chỉnh sửa số lượng của các sản phẩm và chọn các sản phẩm muốn thanh toán
2.5.3.7 Xóa sản phẩm trong giỏ hàng
Bảng 2 9: Mô tả Usecase Xóa sản phẩm trong giỏ hàng
Xóa sản phẩm trong giỏ hàng
Mô tả Người dùng xóa sản phẩm đã được thêm vào giỏ hàng
Tác nhân kích hoạt Người dùng
Tiền điều kiện Người dùng truy cập vào website
Các bước thực hiện (1) Người dùng truy cập vào website
(3) Nhấp chọn vào Giỏ hàng
(4) Danh sách các sản phẩm chưa được mua trong giỏ hàng của người dùng sẽ hiện ra
(5) Chọn sản phẩm muốn xóa và nhấn vào Xóa
(6) Nhấn chọn Xác nhận để hoàn tất xóa sản phẩm khỏi giỏ hàng
Bảng 2 10: Mô tả Usecase Mua hàng
Mô tả Người dùng xác nhận mua các sản phẩm trong giỏ hàng
Tác nhân kích hoạt Người dùng
Tiền điều kiện Người dùng truy cập vào website
Các bước thực hiện (1) Người dùng truy cập vào website
(3) Nhấp chọn vào Giỏ hàng
(4) Danh sách các sản phẩm chưa được mua trong giỏ hàng của người dùng sẽ hiện ra
(5) Nhấn chọn vào Mua hàng
(6) Hệ thống sẽ chuyển người dùng đến trang Xác nhận mua hàng
(7) Danh sách các sản phẩm chưa được mua hiện ra Người dùng có thể chọn tất cả sản phẩm hoặc chọn sản phẩm mình muốn mua
(8) Số tiền cần thanh toán tương ứng sẽ hiện ra, người dùng nhấn vào Hoàn tất mua hàng
2.5.3.9 Xem thông tin cá nhân
Bảng 2 11: Mô tả Usecase Xem thông tin cá nhân
Xem thông tin cá nhân
Mô tả Người dùng xem thông tin cá nhân của mình
Tác nhân kích hoạt Người dùng
Tiền điều kiện Khi người dùng muốn xem thông tin cá nhân của mình
Các bước thực hiện (1) Người dùng truy cập vào website
(3) Chọn mục Thông tin cá nhân
(4) Thông tin cá nhân của người dùng hiện ra
(5) Người dùng có thể nhấn vào Chỉnh sửa để tiến hành chỉnh sửa thông tin cá nhân
2.5.3.10 Chỉnh sửa thông tin cá nhân
Bảng 2 12: Mô tả Usecase Chỉnh sửa thông tin cá nhân
Use Case Chỉnh sửa thông tin cá nhân
Mô tả Người dùng chỉnh sửa thông tin cá nhân của mình
Tác nhân kích hoạt Người dùng
Tiền điều kiện Khi người dùng muốn chỉnh sửa thông tin cá nhân của mình
Các bước thực hiện (1) Người dùng truy cập vào website
(3) Chọn mục Thông tin cá nhân
(5) Tiến hành chỉnh sửa các thông tin muốn sửa sau đó nhấn
Lưu để lưu vào cơ sở dữ liệu
2.5.3.11 Đánh giá, bình luận các sản phẩm
Bảng 2 13: Mô tả Usecase Đánh giá, bình luận các sản phẩm
Use Case Đánh giá, bình luận các sản phẩm
Mô tả Người dùng đánh giá, bình luận các sản phẩm được đăng bán trên website
Tác nhân kích hoạt Người dùng
Tiền điều kiện Khi người dùng quan tâm đến một sản phẩm nào đó trên web
Các bước thực hiện (1) Người dùng truy cập vào website
(3) Chọn một sản phẩm muốn bình luận, đánh giá
(4) Tiến hành đánh giá và bình luận sản phẩm
(5) Người dùng cũng có thể trả lời bình luận của người khác
Bảng 2 14: Mô tả Usecase Tìm kiếm sản phẩm
Mô tả Tìm kiếm theo Tên sản phẩm (từ khóa)
Tác nhân kích hoạt Người dùng, Admin
Tiền điều kiện Khi người dùng có muốn tìm sản phẩm nào đó
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Nhập Từ khóa tìm kiếm vào Thanh Tìm Kiếm ở đầu trang web
(3) Web sẽ tự hiển thị gợi ý theo từ khóa đã nhập Người dùng có thể chọn gọi ý, hoặc là theo từ khóa
(5) Web sẽ load sản phẩm liên quan theo Gợi ý, Từ Khóa trên
Bảng 2 15: Mô tả Usecase Thêm người dùng
Mô tả Quản trị viên thêm người dùng vào website
Tác nhân kích hoạt Quản trị viên
Tiền điều kiện Đăng nhập vào quyền Admin thành công
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Đăng nhập với quyền Admin
(3) Chọn mục Quản lý người dùng, sau đó chọn Thêm người dùng
(4) Chuyển đến trang Thêm người dùng
(5) Quản trị viên nhập các thông tin như: Tài khoản, mật khẩu, Quyền, Họ Tên
(6) Nhấn vào Thêm người dùng để hệ thống lưu thông tin vào cơ sở dữ liệu
Mô tả Quản trị viên chỉnh sửa người dùng đã có trong cơ sở dữ liệu
Tác nhân kích hoạt Quản trị viên
Tiền điều kiện Đăng nhập vào quyền Admin thành công
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Đăng nhập với quyền Admin
(3) Chọn mục Quản lý người dùng
(4) Danh sách các người dùng đã thêm trước đó sẽ được hiển thị lên màn hình
(5) Quản trị viên có thể chọn trực tiếp từ danh sách trên màn hình hoặc nhập thông tin vào khung tìm kiếm theo: Tên người dùng
(6) Sau khi tìm đúng người dùng quản trị viên chọn nút Chỉnh sửa
(7) Chuyển đến trang Chỉnh sửa người dùng
(8) Quản trị viên nhập thông tin mới của người dùng sau đó nhấn nút Cập nhật
Bảng 2 16: Mô tả Usecase Xóa người dùng
Mô tả Quản trị viên xóa người dùng trong cơ sở dữ liệu
Tác nhân kích hoạt Quản trị viên
Tiền điều kiện Đăng nhập vào quyền Admin thành công
Người dùng đã có trên cơ sở dữ liệu
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Đăng nhập với quyền Admin
(3) Chọn mục Quản lý người dùng
(4) Hiển thị Danh sách các người dùng trong cơ sở dữ liệu
Quản trị viên có thể dễ dàng lựa chọn từ danh sách hiển thị trên màn hình hoặc nhập thông tin vào ô tìm kiếm bằng cách sử dụng Mã người dùng hoặc tên người dùng.
(6) Click button Xóa ở dòng của người dùng muốn xóa
(7) Người dùng bị disable => tương đồng với Xóa
Bảng 2 17: Mô tả Usecase Tìm kiếm người dùng
Mô tả Tìm kiếm theo Tên ( từ khóa )
Tác nhân kích hoạt Quản trị viên
Tiền điều kiện Khi người dùng có muốn tìm người dùng nào đó
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Nhập Từ khóa tìm kiếm vào Thanh Tìm Kiếm ở trang quản lý người dùng
(4) Trang sẽ load sản phẩm liên quan theo Từ Khóa lên
Bảng 2 18: Mô tả Usecase Thêm danh mục
Mô tả Quản trị viên thêm danh mục sản phẩm vào website
Tác nhân kích hoạt Quản trị viên
Tiền điều kiện Đăng nhập vào quyền Admin thành công
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Đăng nhập với quyền Admin
(3) Chọn mục Quản lý danh mục, sau đó chọn Thêm danh mục mới
(4) Chuyển đến trang Thêm danh mục
(5) Quản trị viên nhập các thông tin như: Tên danh mục, mô tả danh mục
(6) Nhấn vào Thêm danh mục để hệ thống lưu thông tin vào cơ sở dữ liệu
Bảng 2 19: Mô tả Usecase Chỉnh sửa danh mục
Mô tả Quản trị viên chỉnh sửa danh mục đã có trong cơ sở dữ liệu
Tác nhân kích hoạt Quản trị viên
Tiền điều kiện Đăng nhập vào quyền Admin thành công
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Đăng nhập với quyền Admin
(3) Chọn mục Quản lý danh mục
(4) Danh sách các danh mục đã thêm trước đó sẽ được hiển thị lên màn hình
(5) Quản trị viên có thể chọn trực tiếp từ danh sách trên màn hình hoặc nhập thông tin vào khung tìm kiếm theo: Tên danh mục
(6) Sau khi tìm đúng danh mục quản trị viên chọn nút Chỉnh sửa
(7) Chuyển đến trang Chỉnh sửa danh mục
(8) Quản trị viên nhập thông tin mới của danh mục sau đó nhấn nút Cập nhật
Bảng 2 20: Mô tả Usecase Xóa danh mục
Mô tả Quản trị viên xóa danh mục trong cơ sở dữ liệu
Tác nhân kích hoạt Quản trị viên
Tiền điều kiện Đăng nhập vào quyền Admin thành công
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Đăng nhập với quyền Admin
(3) Chọn mục Quản lý danh mục
(4) Hiển thị Danh sách các danh mục trong cơ sở dữ liệu
Quản trị viên có thể dễ dàng lựa chọn từ danh sách hiển thị trên màn hình hoặc nhập thông tin vào ô tìm kiếm bằng cách sử dụng tên danh mục.
(6) Click button Xóa ở dòng của danh mục muốn xóa
(7) Danh mục bị disable => tương đồng với Xóa
Bảng 2 21: Mô tả Usecase Thống kê
Mô tả Quản trị viên xem chi tiết thống kê
Tác nhân kích hoạt Quản trị viên
Tiền điều kiện Đăng nhập vào quyền Admin thành công
Các bước thực hiện (1) Người dùng truy cập vào website
(2) Đăng nhập với quyền Admin
(4) Hệ thống sẽ hiển thị biểu đồ thống kê doanh thu và đơn đặt hàng theo từng tháng
(5) Đồng thời hệ thống còn hiển thị số lượng đơn hàng, khách hàng mới, doanh thu trong ngày
(6) Người dùng có thể bấm vào nút Export to Excel để xuất file excel thống kê