Báo cáo tiểu luận nhóm môn Kiến Trúc Và Thiết Kế Phần Mềm, bài báo cáo này sẽ giúp các bạn đang học môn Kiến Trúc Và Thiết Kế Phần Mềm tham khảo và hoàn thành tốt bài tiểu luận của mình. Chúc các bạn báo cáo thành công và đạt được điểm cao ở môn học này.
CƠ SỞ LÝ THUYẾT
Khái niệm về kiến trúc phần mềm
Kiến trúc phần mềm đóng vai trò cực kỳ quan trọng trong vòng đời phát triển phần mềm, vì nó cung cấp bản thiết kế (Blueprint) giúp hướng dẫn quá trình phát triển dựa trên phân tích yêu cầu Thiết kế kiến trúc phản ánh các quyết định quyết định nhất định, ảnh hưởng lớn đến thành công cuối cùng của sản phẩm phần mềm Nó mô tả cấu trúc các thành phần hệ thống và cách chúng tương tác với nhau, đồng thời phải đáp ứng cả yêu cầu chức năng và phi chức năng Thiết kế kiến trúc còn đóng vai trò là kế hoạch để đánh giá, thực hiện và cải tiến phần mềm một cách hiệu quả.
Nhiều nhà nghiên cứu đã phân tích kiến trúc phần mềm và có các quan điểm đa dạng về cách trình bày tối ưu hệ thống phần mềm Mỗi kiến trúc đều mang giá trị riêng, không có phương pháp nào là sai Theo Bass L và các cộng sự, kiến trúc phần mềm cần chú trọng những điểm cốt yếu để đảm bảo tính hiệu quả và khả năng mở rộng của hệ thống.
Kiến trúc phần mềm là cấu trúc hoặc các cấu trúc của hệ thống, bao gồm các thành phần phần mềm và các mối quan hệ giữa chúng Nó mô tả các thuộc tính có thể nhìn thấy từ bên ngoài của các thành phần này, giúp hiểu rõ cách hệ thống hoạt động Theo Bass, Clements, Kazman, kiến trúc phần mềm đóng vai trò quyết định trong hiệu suất và khả năng mở rộng của hệ thống phần mềm.
An alternative definition of software architecture is provided by Philippe Kruchten, Grady Booch, Kurt Bittner, and Rich Reitman, who refine and build upon the foundational work of Mary Shaw and David Garlan (Shaw and Garlan, 1996) Their definition emphasizes the core principles and structural organization that underpin effective software systems, highlighting the importance of architectural design in achieving system quality and maintainability.
Kiến trúc phần mềm là tập hợp các quyết định quan trọng về cách tổ chức hệ thống phần mềm, bao gồm lựa chọn các yếu tố cấu trúc, giao diện và hành vi của chúng để tạo thành hệ thống thống nhất Nó xác định cách các thành phần hợp tác và tích hợp vào các hệ thống con lớn hơn, dựa trên các mẫu kiến trúc hướng dẫn tổ chức Kiến trúc phần mềm cũng đảm bảo các yếu tố về chức năng, khả năng sử dụng, khả năng phục hồi, hiệu năng, khả năng tái sử dụng, dễ hiểu, cũng như các ràng buộc về kinh tế, công nghệ, sự cân bằng và yếu tố thẩm mỹ.
Kiến trúc phần mềm đóng vai trò quan trọng trong thành công của dự án, vì nó bao gồm các quyết định chiến lược ảnh hưởng trực tiếp đến hiệu quả và khả năng mở rộng của hệ thống Theo Eoin Woods, nếu các quyết định về kiến trúc phần mềm không được thực hiện đúng cách, điều đó có thể dẫn đến thất bại của dự án Do đó, việc xây dựng kiến trúc phần mềm đúng đắn là yếu tố then chốt để đảm bảo dự án phát triển bền vững và thành công lâu dài.
IEEE Std 1471 định nghĩa kiến trúc hệ thống là “tổ chức cơ bản của một hệ thống, thể hiện qua các phần tử của nó, mối quan hệ giữa chúng và với môi trường xung quanh, cũng như các nguyên tắc hướng dẫn trong thiết kế và phát triển hệ thống.” Đây là khái niệm cốt lõi giúp hiểu rõ cấu trúc và cách xây dựng hệ thống một cách hiệu quả, tuân thủ các nguyên tắc chuẩn hóa của IEEE.
Martin Fowler nhấn mạnh rằng việc phân rã hệ thống ở mức cao thành các thành phần rõ ràng là yếu tố then chốt trong kiến trúc phần mềm Ông cũng chỉ ra những quyết định kiến trúc khó thay đổi sau này, đòi hỏi sự cân nhắc kỹ lưỡng từ ban đầu Thêm vào đó, trong một hệ thống phức tạp, tồn tại nhiều kiến trúc khác nhau, mỗi cái đều ảnh hưởng đến khả năng mở rộng và bảo trì Cuối cùng, việc xác định những phần có thể thay đổi trong vòng đời của hệ thống giúp tối ưu quá trình phát triển và duy trì hệ thống linh hoạt hơn.
Trong kiến trúc phần mềm, các phần tử kiến trúc có thể là mô-đun, hệ thống con, đối tượng hoặc phần mềm nhị phân như thành phần DLL, JavaBean, EJB, CORBA hoặc các thành phần web, thậm chí cả hệ thống hoàn chỉnh Trong cuốn sách này, “phần tử - element” được sử dụng để chỉ các đơn vị chung của kiến trúc phần mềm, và thuật ngữ “thành phần - component” được dùng đồng nghĩa trong các cuộc thảo luận liên quan đến kiến trúc phần mềm.
Khái niệm mô hình MVVM
MVVM không phải là một framework hay library, mà đơn thuần là một hướng dẫn giúp bạn định nghĩa cấu trúc ứng dụng một cách rõ ràng và có tổ chức Phương pháp này được phát triển dựa trên kiến trúc MVP, nhằm tối ưu hóa quá trình xây dựng và bảo trì phần mềm Hiểu rõ MVVM giúp các nhà phát triển tạo ra những ứng dụng dễ mở rộng, bảo trì và cải tiến trong tương lai.
Mô hình MVVM cho phép tách biệt dữ liệu (Model), mã thực thi (logic hay ViewModel) và giao diện người dùng (View).
Trong các mô hình truyền thống, việc xử lý sự kiện Click thường được thực hiện bằng cách viết mã thực thi trực tiếp trên nút bấm, giúp đơn giản và trực quan Tuy nhiên, với mô hình MVVM, cách tiếp cận này không còn phù hợp, vì MVVM hướng đến việc tách biệt rõ ràng giữa giao diện người dùng và logic xử lý, thúc đẩy sử dụng các lệnh và dữ liệu liên kết để quản lý sự kiện một cách linh hoạt và có cấu trúc hơn.
Trong mô hình MVVM, các điều khiển như Button, ListView, SearchBar không thể kết nối trực tiếp đến dữ liệu mà chủ yếu thông qua thuộc tính Command, đây là một thuộc tính kiểu ICommand giúp tách riêng phần giao diện và logic xử lý.
Giao diện của ứng dụng chủ yếu dựa trên thành phần View, là phần duy nhất người dùng có thể tương tác trực tiếp trong chương trình View chịu trách nhiệm mô tả dữ liệu và thể hiện thông tin trực quan, giúp người dùng dễ dàng thao tác và hiểu nội dung ứng dụng Việc thiết kế thành phần View đúng chuẩn không những nâng cao trải nghiệm người dùng mà còn tối ưu hóa khả năng tương tác của ứng dụng.
Trong mô hình này, điểm khác biệt nổi bật so với các mô hình khác là View có khả năng thực hiện các hành vi và phản hồi lại người dùng thông qua các tính năng như binding và command, giúp tăng cường khả năng tương tác và linh hoạt trong lập trình giao diện người dùng.
Cũng tương tự như trong mô hình MVC Model là các đối tượng giúp truy xuất và thao tác trên dữ liệu thực sự.
ViewModel là lớp trung gian quan trọng giữa View và Model trong mô hình MVVM, đóng vai trò như một thành phần thay thế Controller trong MVC Nó chứa các mã lệnh cần thiết để thực hiện data binding và xử lý command, giúp tách biệt rõ ràng logic giao diện người dùng và dữ liệu Việc sử dụng ViewModel tối ưu hóa quá trình phát triển ứng dụng, nâng cao khả năng bảo trì và mở rộng hệ thống.
Cấu trúc thư mục trong MVVM
Thông thường khi sử dụng với MVVM chúng ta nên tạo 3 thư mục chính chứa các file code liên quan.
Trong thư mục Views chứa các file giao diện và mỗi file đều đi kèm với class code-behind, tuy nhiên, bạn sẽ không cần sử dụng đến file code-behind này Thay vào đó, tất cả các công việc cần thực hiện sẽ được chuyển xuống class ViewModel để quản lý logic và dữ liệu một cách tối ưu và hiệu quả hơn.
Trong thư mục Models, bạn nên tạo các lớp chứa dữ liệu cùng các liên kết validation và logic nghiệp vụ nhằm đảm bảo tính toàn vẹn của dữ liệu Đồng thời, có thể tách các lớp này ra khỏi thư mục Repositories để quản lý tốt hơn Các thành phần này đóng vai trò quan trọng trong mô hình MVVM, giúp xây dựng ứng dụng rõ ràng, dễ bảo trì và mở rộng.
Bạn nên tạo một thư mục ViewModels để tổ chức các lớp ViewModels tương ứng với các giao diện trong dự án của mình Thông thường, mỗi file giao diện sẽ có một lớp ViewModels tương ứng, giúp dễ dàng quản lý và duy trì mã nguồn Trong một số trường hợp, bạn có thể tạo nhiều lớp phụ để tối ưu hóa cấu trúc mã và gọi chúng trong lớp ViewModels chính, đảm bảo code rõ ràng, dễ đọc và linh hoạt trong phát triển ứng dụng.
Data Binding (ràng buộc dữ liệu)
Data Binding là kỹ thuật giúp kết nối hiệu quả giữa giao diện người dùng (UI) và dữ liệu, nhờ đó UI tự động cập nhật khi dữ liệu thay đổi Trong WPF, Data Binding còn hỗ trợ các chiều khác nhau, cho phép các thay đổi từ UI phản ánh ngược vào dữ liệu một cách dễ dàng Kỹ thuật binding trong mô hình MVVM mang lại bước tiến mới, đáp ứng các mong đợi của lập trình viên về tính linh hoạt và hiệu quả trong quản lý dữ liệu và giao diện.
Data binding là thành phần cốt lõi tạo nên các cơ chế hoạt động trong WPF, giúp liên kết dữ liệu nguồn và đích từ mọi đối tượng, từ cửa sổ, các control đơn giản như TextBlock đến các UserControl phức tạp, mang lại khả năng cập nhật dữ liệu linh hoạt và hiệu quả.
Tất cả được thực hiện một cách dễ dàng, nhanh chóng, hiệu quả và có thể không cần dùng đến bất kì dòng code-behind (C#, VB.NET, …) nào.
Data Template là kỹ thuật quan trọng trong WPF giúp tạo ra các khuôn mẫu giao diện hiển thị dữ liệu rõ ràng và trực quan Chỉ áp dụng cho các Control, Data Template xác định cách thức và cấu trúc mà dữ liệu hoặc control sẽ được trình bày trên màn hình Việc sử dụng Data Template giúp đảm bảo giao diện người dùng linh hoạt, có khả năng tùy biến cao, phù hợp với các yêu cầu thiết kế khác nhau của ứng dụng.
Data Template là công cụ giúp gắn dữ liệu dạng không hình ảnh vào một cấu trúc có khả năng hiển thị, cho phép dữ liệu hiển thị trực quan theo ý muốn của lập trình viên Tính năng này hoạt động giống như Data Binding nhưng không yêu cầu người dùng phải biết về code-behind của ứng dụng, giúp đơn giản hóa quá trình phát triển giao diện người dùng.
Data Binding và Data Template trong WPF giúp người dùng hiển thị và cập nhật dữ liệu một cách hiệu quả, tạo trải nghiệm trực quan Để nâng cao tương tác và xử lý dữ liệu từ người dùng, WPF cung cấp tính năng command, cho phép liên kết các hành động với các điều kiện cụ thể Các command trong WPF được xem như dữ liệu và được cung cấp cho người dùng thông qua chức năng binding, giúp xây dựng các giao diện động và phản hồi nhanh chóng.
Một command binding cho phép bạn tùy ý xác định các phương thức xử lý, phím tắt hoặc thao tác chuột để kích hoạt.
1.2.2 Ưu điểm, Nhược điểm MVVM Ưu điểm:
MVVM sẽ tạo sự tương tác hiệu quả giữa designer và developer
Tăng khả năng sử dụng lại các thành phần hay việc thay đổi giao diện chương trình mà không cần thiết phải viết lại code quá nhiều
Thể hiện tính chuyên nghiệp trong lập trình và phân tích thiết kế là yếu tố quan trọng để xây dựng các ứng dụng chất lượng cao Việc phân chia hệ thống thành các thành phần độc lập giúp tăng tốc quá trình phát triển, giảm thiểu rủi ro và nâng cao khả năng mở rộng cũng như bảo trì của ứng dụng Nhờ đó, các dự án phần mềm có thể được hoàn thành nhanh chóng, dễ dàng nâng cấp và duy trì ổn định theo thời gian.
Mô hình MVC
1.3.1 Tổng quan về kiến trúc MVC
Mô hình kiến trúc MVC đã tồn tại từ lâu trong kỹ thuật phần mềm và được nhiều nhà phát triển Web sử dụng rộng rãi Kiến trúc này phù hợp cho các ứng dụng tương tác trên web như mua sắm trực tuyến, khảo sát, đăng ký sinh viên và các hệ thống dịch vụ khác MVC đặc biệt hiệu quả trong các ứng dụng có giao diện người dùng dễ thay đổi dữ liệu, giúp tối ưu hóa quá trình phát triển và bảo trì hệ thống.
Kiến trúc Model-View-Controller (MVC) tách phần trình bày và tương tác khỏi dữ liệu hệ thống, giúp cải thiện khả năng quản lý và mở rộng phần mềm Được giới thiệu lần đầu trong ngôn ngữ lập trình Smalltalk-80, kiến trúc này chia hệ thống thành ba thành phần chính: Model, View và Controller, nhằm phân chia rõ ràng trách nhiệm và tăng tính linh hoạt trong phát triển phần mềm Theo Glenn Krasner và Stephen Pope (1988), hệ thống dựa trên mô hình MVC giúp các thành phần tương tác hiệu quả, tối ưu hóa quá trình xây dựng và bảo trì ứng dụng.
Model: cấu phần mô hình quản trị dữ liệu hệ thống (bao gồm cả các thao tác trên dữ liệu)
View (hiển thị) đóng vai trò quan trọng trong việc xác định và quản lý cách dữ liệu được trình bày cho người dùng, đảm bảo trải nghiệm người dùng trực quan và dễ dàng tương tác Thành phần này chịu trách nhiệm hiển thị thông tin một cách rõ ràng và hấp dẫn, đồng thời cung cấp các đối tượng GUI như textbox, button, images để người dùng có thể tương tác một cách hiệu quả Quản lý phần tử hiển thị chính là yếu tố then chốt để tối ưu hóa trải nghiệm người dùng trong phát triển phần mềm và ứng dụng.
Trong ASP.NET MVC, View đóng vai trò là nơi hiển thị dữ liệu, bao gồm HTML, CSS và cú pháp Razor đặc trưng giúp dễ dàng liên kết với mô hình và bộ điều khiển Cú pháp Razor là phần quan trọng tạo nên sự liên kết linh hoạt, cung cấp khả năng truyền dữ liệu và điều kiện hiển thị một cách hiệu quả Việc sử dụng View giúp tách biệt rõ ràng giữa giao diện người dùng và lớp xử lý logic, tăng tính tổ chức và dễ bảo trì của ứng dụng.
Controller - Bộ điều khiển: quản lý tương tác của người dùng Thông thường, Controller nhận yêu cầu sau đó chuyển những tương tác này đến View hoặc Model.
Các mô hình đồ họa của kiến trúc liên kết với mẫu MVC thể hiện rõ qua Hình 1.1 và 1.2, trình bày kiến trúc từ các khung nhìn khác nhau Trong đó, Hình 4.1 cung cấp một khung nhìn khái niệm về kiến trúc MVC, trong khi Hình 1.2 minh họa một kiến trúc thời gian chạy có thể áp dụng để quản lý tương tác trong hệ thống dựa trên web, giúp hiểu rõ hơn về cách mô hình này hoạt động trong thực tế.
1.3.2 Mô hình MVC và các thành phần bên trong của MVC
Hình 1.1 mô tả mẫu Model-View-Controller nổi tiếng Mô hình này là cơ sở của quản lý tương tác trong nhiều hệ thống dựa trên web.
Hình 1.1 Tổ chức của mô hình MVC
Hình 1.2 Kiến trúc ứng dụng Web sử dụng mẫu kiến trúc MVC
Hình 1.3 mô tả quá trình trình tự trong kiến trúc MVC chung, bắt đầu khi máy khách khởi động ứng dụng Controller khởi tạo Model và View, đồng thời đăng ký với Model để nhận thông báo khi có sự thay đổi Khi người dùng gửi yêu cầu qua dòng lệnh hoặc giao diện View, Controller sẽ chuyển yêu cầu này đến Model để cập nhật dữ liệu Các thay đổi trong Model sẽ kích hoạt thông báo tự động tới tất cả các thành phần đăng ký, giúp View cập nhật giao diện theo dữ liệu mới một cách nhanh chóng.
Hình 1.3 Sơ đồ trình tự cho kiến trúc MVC
Hình 1.4 trình bày sơ đồ kiến trúc khối MVC trong công nghệ Java, trong đó JavaServer Pages (JSP) đảm nhiệm chức năng phần View để phát triển giao diện người dùng; Java Servlet được sử dụng để thực hiện mô-đun Điều khiển (Controller), xử lý các yêu cầu và điều phối hoạt động của hệ thống; còn Java Bean, Java Enterprise Bean (EJB) cùng Java Data Base Connectivity (JDBC) đóng vai trò trong phát triển mô hình Dữ liệu (Model), quản lý dữ liệu và tương tác với cơ sở dữ liệu Tương tự, trong công nghệ Microsoft, ASP.NET đảm nhiệm phát triển giao diện (View), còn ADO.NET dùng để xây dựng mô hình dữ liệu; bộ điều khiển (Controller) nhận yêu cầu từ người dùng qua GUI hoặc dòng lệnh, khởi tạo các phiên bản dữ liệu, chọn View phù hợp để hiển thị dữ liệu, gọi chức năng nghiệp vụ của Model và điều hướng dữ liệu tới View để hiển thị trên giao diện người dùng.
Ví dụ sau minh họa cách triển khai đơn giản kiến trúc MVC với mỗi mô-đun gồm một lớp Java duy nhất, giúp dễ hiểu và dễ thực hiện Trong mô hình này, lớp MyBean JavaBean đảm nhận vai trò Mô hình dữ liệu, quản lý thông tin và trạng thái của dữ liệu ứng dụng Lớp MyServlet đóng vai trò Controller, xử lý các yêu cầu từ người dùng và điều phối luồng dữ liệu giữa Model và View Cuối cùng, lớp from-Servlet JSP đảm nhiệm vai trò View, hiển thị dữ liệu và giao diện người dùng một cách trực quan.
Hình 1.4 trình bày sơ đồ kiến trúc của ứng dụng web, trong đó MyServlet Servlet đặt một giá trị mục và lưu trữ nó trong JavaBean có tên là myBean Tiếp theo, servlet chuyển quyền điều khiển đến trang JSP fromServlet.jsp, trang này lấy dữ liệu từ myBean và hiển thị nó trên nền web một cách rõ ràng và hiệu quả.
Hình 1.4 Kiến trúc MVC trên nền tảng Java Web
Kiến trúc MVC thường được áp dụng trong các miền có nhiều phương thức xem và tương tác với dữ liệu khác nhau Nó phù hợp khi yêu cầu về giao diện người dùng và trình bày dữ liệu trong tương lai chưa rõ ràng hoặc linh hoạt MVC giúp tối ưu hóa quá trình phát triển phần mềm bằng cách tách biệt giao diện, dữ liệu và logic xử lý, từ đó nâng cao khả năng mở rộng và bảo trì hệ thống.
1.3.3 Ưu điểm và nhược điểm của kiến trúc MVC Ưu điểm
Cho phép dữ liệu thay đổi độc lập với biểu diễn của nó và ngược lại.
Hệ thống hỗ trợ trình bày đồng bộ dữ liệu theo nhiều cách khác nhau, đảm bảo các thay đổi được thực hiện trên một biểu diễn duy nhất được phản ánh chính xác trong tất cả các phương pháp trình bày Điều này giúp tối ưu hóa quá trình làm việc và nâng cao hiệu quả quản lý dữ liệu, đồng thời mang lại trải nghiệm trải nghiệm người dùng linh hoạt và đồng nhất trong việc hiển thị dữ liệu.
Thể hiện tính chuyên nghiệp trong lập trình, phân tích thiết kế.
Loose coupling: (gắn kết lỏng lẻo): bản chất của MVC framework là có sự ghép nối thấp giữa các models, views, controllers
Do được chia thành các thành phần độc lập nên giúp phát triển ứng dụng nhanh, đơn giản, dễ nâng cấp và bảo trì, …
Nhiều bộ công cụ Framework của nhà cung cấp MVC có sẵn
Việc các chuyên gia phát triển đồ họa, lập trình và cơ sở dữ liệu cùng làm việc trong một nhóm dự án được thiết kế bài bản rất có lợi cho sự phát triển của dự án Sự hợp tác chặt chẽ này giúp tối ưu hóa quá trình phát triển, nâng cao chất lượng sản phẩm và thúc đẩy sáng tạo hiệu quả hơn Khi các chuyên gia phối hợp tốt, dự án đạt được tiến độ nhanh hơn và đáp ứng tốt hơn các yêu cầu kỹ thuật và sáng tạo.
Có thể liên quan đến việc chứa các mã trình bổ sung và mã trình phức tạp, ngay cả trong trường hợp mô hình dữ liệu và các tương tác đơn giản, điều này nhấn mạnh tầm quan trọng của việc kiểm soát và tối ưu hóa mã code để đảm bảo hiệu suất và khả năng mở rộng của hệ thống.
Đối với những dự án nhỏ việc áp dụng mô hình MVC gây cồng kềnh, tốn thời gian trong quá trình phát triển
Tốn thời thời gian trung chuyển dữ liệu của các thành phần.
Không phù hợp với các ứng dụng hướng về tác nhân như các ứng dụng di động và robot tương tác.
Nhiều cặp bộ controller và view dựa trên cùng một model làm cho bất kỳ thay đổi mô hình dữ liệu nào trở nên đắt đỏ.
Việc điều hướng mã nguồn trong các framework có thể trở nên phức tạp do giới thiệu nhiều gián tiếp mới, đòi hỏi người dùng phải thích ứng với các tiêu chí phân rã theo mô hình MVC để đảm bảo khả năng điều hướng mã nguồn hiệu quả.
Mô hình MVP
Cấu trúc mô hình MVP
Tầng trình diễn đóng vai trò trung gian giữa View và Model, chịu trách nhiệm lấy dữ liệu từ Model rồi định dạng và trả về cho View để hiển thị Tuy nhiên, khác với mô hình MVC truyền thống, tầng trình diễn còn quyết định các hành động sẽ xảy ra khi người dùng tương tác với View, tức là nó chứa logic ứng dụng thúc đẩy quá trình xử lý và điều hướng của hệ thống.
Tầng logic dữ liệu - Model
Trong kiến trúc phần mềm, Model là tầng xử lý dữ liệu, đảm nhận việc lấy dữ liệu từ database hoặc network một cách bất đồng bộ và trả về cho Presenter Trong một ứng dụng có kiến trúc tốt, Model hoạt động như một gateway giữa tầng domain và tầng business logic Trong mô hình Clean Architecture của Uncle Bob, Model được xem như một interactor thực thi các use case, nhưng về cơ bản, nó đơn giản như một data source cung cấp dữ liệu cho giao diện người dùng hiển thị.
This class is responsible for binding views, populating data into the UI, managing animations, and handling user input events to send to the presenter Views are typically implemented using an Activity, Fragment, or custom View, depending on the application's architecture The Activity contains a reference to a Presenter, which manages the presentation logic Ideally, the Presenter should be provided through a Dependency Injection framework like Dagger; however, in cases where such frameworks are not used, alternative methods for dependency management may be employed.
So sánh ưu nhược điểm của MVC MVP và MVVM
Ưu nhược điểm của MVC là gì?
Mô hình MVC có rất nhiều ưu điểm, cụ thể như là:
MVC giúp giảm thiểu lượng dữ liệu truyền tải nhờ vào việc không sử dụng nhiều viewstate, từ đó tiết kiệm băng thông hiệu quả Các thao tác gửi và nhận dữ liệu diễn ra liên tục, đảm bảo quá trình hoạt động mượt mà và ổn định hơn cho website hoặc ứng dụng của bạn.
+ Có thể kiểm tra, phát hiện lỗi phần mềm một cách dễ dàng
+ Dễ dàng trong việc phân tách các phần Model và View
+ Mô hình này có kết cấu đơn giản Không cần quá am hiểu về kỹ thuật cũng có thể sử dụng được
Hỗ trợ tốt cho các nền tảng phát triển SEO giúp bạn dễ dàng tạo ra các mã URL tối ưu, thu hút lượng truy cập lớn hơn cho bất kỳ ứng dụng nào Việc tối ưu hóa URL không chỉ nâng cao khả năng hiển thị trên các công cụ tìm kiếm mà còn giúp người dùng dễ dàng hiểu và truy cập vào nội dung mong muốn một cách nhanh chóng và thuận tiện.
Bên cạnh những ưu điểm nền bên trên thì MVC cũng tồn tại một số nhược điểm:
+ Controller và View có sự liên quan với nhau Vì vậy, khi thay đổi ở View thì đồng nghĩa bạn sẽ phải thay đổi ở Controller
+ Khó thực hiện chạy unit test do Controller và Android API có sự liên hệ chặt chẽ với nhau
+ Theo thời gian, Controller sẽ trở nên khó kiểm soát vì càng ngày càng có nhiều code được viết thêm vào
MVC phù hợp với các dự án lớn nhờ khả năng tổ chức mã rõ ràng và dễ mở rộng Tuy nhiên, đối với các dự án nhỏ, mô hình này trở nên cồng kềnh và tiêu tốn nhiều thời gian trong quá trình trung chuyển dữ liệu Vì vậy, việc chọn MVC phù hợp nhất cho dự án phụ thuộc vào quy mô và yêu cầu của ứng dụng.
+ Làm khó khăn trong quá trình điều hướng code của dự án Ưu nhược điểm của MVP là gì?
Writing unit tests for presenters is straightforward because they are decoupled from views, allowing them to operate independently without relying on Android UI components or app dependencies, facilitating isolated and efficient testing.
+ MVP có cấu trúc code rõ ràng hơn so với MVC nên khá dễ hiểu và dễ dùng. Ít bug hơn, dễ dàng review code
Mô hình MVP theo thời gian thường khiến Presenter phát triển lớn lên do phải tích hợp nhiều logic kinh doanh rải rác, gây khó khăn trong việc kiểm soát và phân chia mã nguồn Khi Presenter trở nên quá lớn, việc bảo trì và mở rộng hệ thống sẽ gặp nhiều thách thức, ảnh hưởng đến hiệu quả phát triển dự án.
+ Nó sẽ trở lên rườm rà khi ta xây dựng với các ứng dụng nhỏ, hoặc với các Activity đơn giản
+ Khó sử dụng lại logic code trong Presenter cho các View khác Ưu nhược điểm của MVVM là gì?
+ Thực hiện Unit testing bây giờ sẽ rất dễ dàng, vì bạn thực sự không phụ thuộc vào view
+ MVVM sẽ tạo sự tương tác hiệu quả giữa designer và developer
+ Tăng khả năng sử dụng lại các thành phần hay việc thay đổi giao diện chương trình mà không cần phải viết lại code quá nhiều
+ Phát triển ứng dụng nhanh, đơn giản, dễ nâng cấp, bảo trì…
Khả năng duy trì của hệ thống khi hiển thị view cho phép gán cả biến và biểu thức, giúp tối ưu hóa quá trình cập nhật và xử lý dữ liệu Tuy nhiên, các logic không liên quan có thể tích tụ theo thời gian, dẫn đến tình trạng phức tạp và khó bảo trì Điều này cũng ảnh hưởng đến việc thêm code mới vào file XML, làm tăng nguy cơ gây lỗi và giảm hiệu quả của dự án phát triển ứng dụng.
Đối với các dự án nhỏ, việc áp dụng mô hình MVVM có thể gây ra sự cồng kềnh và làm tăng thời gian phát triển do quá trình trung chuyển dữ liệu giữa các thành phần trở nên phức tạp và mất thời gian.
+ Đối với dự án lớn hơn, nó gây khó khăn và mất thời gian để thiết kế các ViewModel
+ Việc liên kết dữ liệu cho tất cả các thành phần gây khó khăn trong việc debug khi cơ sở dữ liệu phức tạp.
TÀI LIỆU KIẾN TRÚC PHẦN MỀM
Giới thiệu 13
Trong bối cảnh công nghệ thông tin phát triển mạnh mẽ, nhu cầu đặt đồ uống online ngày càng trở nên phổ biến và thúc đẩy nhóm chúng tôi phát triển ứng dụng đặt đồ uống dựa trên mô hình kiến trúc MVVM, giúp các chủ quán mở rộng kênh bán hàng và gia tăng doanh thu Ứng dụng dễ sử dụng, có giao hàng nhanh, chi phí vận chuyển thấp, đồng thời tiếp cận lượng lớn khách hàng tiềm năng Các tính năng của ứng dụng bao gồm xem menu đồ uống, đăng ký tài khoản, đăng nhập hệ thống, chọn món và thanh toán khi nhận hàng, nhằm mang lại trải nghiệm tiện lợi và hiệu quả cho khách hàng.
Tài liệu này cung cấp kiến trúc tổng quan của app đặt đồ uống
Ứng dụng đặt đồ uống được thiết kế nhằm đáp ứng nhu cầu đặt hàng nhanh chóng, tiện lợi và dễ dàng cho khách hàng Với mục đích chính là giúp người dùng có thể order đồ uống một cách thuận tiện, tiết kiệm thời gian và trải nghiệm mua sắm trực tuyến thuận lợi hơn Ứng dụng này là công cụ lý tưởng giúp khách hàng lựa chọn và đặt đồ uống mọi lúc, mọi nơi một cách nhanh chóng và hiệu quả.
Tài liệu này trình bày các quyết định kiến trúc đã được thực hiện trong quá trình thiết kế và xây dựng hệ thống, nhằm đảm bảo tính nhất quán và tối ưu trong kiến trúc phần mềm Mô hình tổng thể của hệ thống được mô tả rõ ràng, giúp hiểu rõ các thành phần chính và mối quan hệ giữa chúng, từ đó hỗ trợ quá trình phát triển và bảo trì hệ thống hiệu quả hơn.
Phạm vi của tài liệu này là giải thích kiến trúc của app đặt đồ uống.
Tài liệu này được tạo ra từ phần mềm Star UML.
2.1.3 Định nghĩa, các từ viết tắt
CNTT Công nghệ thông tinUML Ngôn ngữ mô hình thống nhấtCSDL Cơ sở dữ liệu
Tài liệu bao gồm 5 phần, bao gồm:
• Phần 1 giới thiệu về kiến trúc app đặt đồ uống
• Phần 2 giải quyết các mục tiêu và ràng buộc của kiến trúc hệ thống
• Phần 3 mô tả biểu diễn của hệ thống
• Phần 4 mô tả 4 khung nhìn kiến trúc
• Phần 5 của tài liệu nói về những cân nhắc khác của hệ thống như kích thước và hiệu suất của hệ thống
Đại diện kiến trúc
Bài viết trình bày kiến trúc phần mềm dựa trên các khung nhìn chính như khung nhìn ca sử dụng, khung nhìn logic, khung nhìn quy trình và khung nhìn triển khai Các khung nhìn này cung cấp các quan điểm rõ ràng về mô hình hệ thống, giúp hiểu và thiết kế phần mềm một cách toàn diện Mô hình Ngôn ngữ Mô hình Thống nhất (UML) là công cụ chủ đạo được sử dụng để phát triển và thể hiện các khung nhìn này Việc sử dụng StarUML hỗ trợ tạo dựng các sơ đồ UML một cách chính xác và trực quan, nâng cao hiệu quả trong quá trình phân tích và thiết kế hệ thống.
Các mục tiêu và ràng buộc kiến trúc
Kiến trúc của ứng dụng đặt đồ uống được thiết kế nhằm tạo điều kiện thuận lợi cho khách hàng trong quá trình đặt đồ uống và thanh toán hóa đơn một cách dễ dàng và nhanh chóng Hệ thống tối ưu hóa quy trình đặt hàng, tích hợp các phương thức thanh toán linh hoạt, giúp nâng cao trải nghiệm người dùng và đảm bảo sự tiện lợi trong mỗi giao dịch Thiết kế ứng dụng chú trọng vào tính tiện dụng, giúp khách hàng dễ dàng truy cập và sử dụng dịch vụ đặt đồ uống mọi lúc, mọi nơi.
Giúp những người thiết kế cũng như lập trình giải thích về quản lý quy trình đặt đồ uống, hóa đơn của khách hàng.
Khung nhìn kiến trúc
Trong quá trình mô hình hóa, triển khai và lập hồ sơ hệ thống, việc xem xét từ các khía cạnh khác nhau là điều bắt buộc để đạt được hiểu biết toàn diện về hệ thống Kiến trúc hệ thống được mô tả qua năm dạng xem chính: Use Case View giúp hiểu các chức năng chính của hệ thống; Logical View thể hiện cấu trúc logic và các thành phần phần mềm; Process View tập trung vào luồng xử lý và tương tác giữa các thành phần; Physical View mô tả cách hệ thống được triển khai trên phần cứng; và Deployment View trình bày cách các thành phần phần mềm được phân phối trên hạ tầng vật lý, giúp tối ưu hóa hiệu suất và khả năng mở rộng của hệ thống.
Use Case View: mục đích chính của dạng xem ca sử dụng là xác định các trình điều khiển của hệ thống, các yêu cầu hệ thống
Dạng xem Logical View chứa các định nghĩa hệ thống cùng với các biểu đồ lớp và đối tượng phản ánh các dịch vụ mà hệ thống cung cấp cho người dùng cuối Đây là phần mô tả cấu trúc hệ thống một cách rõ ràng và chi tiết, giúp xác định các thành phần chính và cách chúng tương tác với nhau Logical View đóng vai trò quan trọng trong việc thiết kế hệ thống, đảm bảo các dịch vụ được cung cấp phù hợp và hiệu quả.
Trong phần nhìn về quy trình, hệ thống hiển thị các qui trình hình thành cơ chế hoạt động chính Các quy trình này được phản ánh rõ ràng thông qua sơ đồ cộng tác, trình tự và hoạt động, giúp người xem hiểu rõ cách các thành phần phối hợp nhằm đạt được mục tiêu của hệ thống.
Component View: bao gồm các thông số kỹ thuật của hệ thống và giao diện người dùng, ý nghĩa, các thành phần khác nhau tạo nên hệ thống
Xem xét Phần Mềm Triển Khai, nó mô tả các nút phần cứng của các hệ thống khác nhau hoạt động phối hợp cùng nhau Đặc biệt, nó trình bày cách mỗi nút phần cứng được cài đặt và triển khai như thế nào để đảm bảo hiệu quả vận hành tối ưu Việc hiểu rõ cấu trúc phân phối phần cứng giúp hoàn thiện quá trình thiết kế hệ thống, nâng cao khả năng mở rộng và duy trì hệ thống một cách hiệu quả.
Kiểu kiến trúc
Mô hình MVVM là kiến trúc phổ biến được sử dụng để đáp ứng mọi nhu cầu chức năng, phi chức năng và yêu cầu thẩm mỹ của hệ thống, đặc biệt trong các ứng dụng đặt đồ uống Mô hình bao gồm ba thành phần chính: View, thể hiện giao diện người dùng; ViewModel, xử lý logic và liên kết dữ liệu giữa Model và View; và Model, quản lý dữ liệu và các nghiệp vụ liên quan Áp dụng kiến trúc MVVM giúp tăng tính mở rộng, dễ bảo trì và nâng cao trải nghiệm người dùng cho ứng dụng đặt đồ uống.
• Model Cũng tương tự như trong mô hình MVC Model là các đối tượng giúp truy xuất và thao tác trên dữ liệu thực sự.
Trong mô hình MVC, View đóng vai trò là giao diện của ứng dụng, chịu trách nhiệm hiển thị dữ liệu và tiếp nhận tương tác từ người dùng Tuy nhiên, khác với các ứng dụng truyền thống, View trong mô hình này hoạt động tích cực hơn nhờ vào khả năng thực hiện hành vi và phản hồi người dùng thông qua tính năng binding và command, giúp nâng cao trải nghiệm người dùng và tạo ra sự linh hoạt trong phát triển ứng dụng.
ViewModel là lớp trung gian giữa View và Model, có thể xem như thành phần thay thế cho Controller trong mô hình MVC Nó chứa các mã lệnh cần thiết để thực hiện dữ liệu binding và xử lý command, giúp tạo liên kết chặt chẽ giữa giao diện người dùng và dữ liệu logic một cách hiệu quả Thiết kế ViewModel giúp tối ưu hóa quá trình phát triển phần mềm, tăng cường khả năng mở rộng và bảo trì hệ thống.
Tiến trình kiến trúc
Ứng dụng đặt đồ uống theo quy trình hợp lý (RUP) nhằm đảm bảo phát triển phần mềm chất lượng, đáp ứng nhu cầu người dùng cuối trong ngân sách và thời gian dự kiến RUP là phương pháp phát triển phần mềm lặp đi lặp lại, chia thành bốn giai đoạn chính: inception để thiết lập trường hợp kinh doanh của dự án, elaboration để xác lập kế hoạch và kiến trúc hệ thống, construction để triển khai hệ thống, và transition để đưa sản phẩm vào vận hành thực tế.
Trong quy trình phát triển phần mềm, mỗi lần lặp được lập kế hoạch riêng để đảm bảo mục tiêu rõ ràng và kiểm soát tiến trình Kế hoạch lặp được chuẩn bị trước mỗi vòng, mô tả chi tiết các hoạt động sẽ thực hiện, xác định rõ các công nhân tham gia và các thành phẩm dự kiến tạo ra Mỗi vòng lặp tạo ra một số phiên bản có thể kiểm thử, nhằm tiến dần đến sản phẩm cuối cùng hoàn chỉnh Các thành phẩm sau mỗi vòng lặp có thể bao gồm các tính năng mới, bản sửa lỗi hoặc các cải tiến chức năng, giúp tối ưu hóa quá trình phát triển và đảm bảo chất lượng sản phẩm cuối cùng.
- Các mô hình (Mô hình UC, mô hình Đối tượng, ), thường được mô tả bởi UML
- Các tài liệu (Tài liệu yêu cầu stakeholder, tài liệu trực quan, các tài liệu
Mỗi đánh giá sau mỗi vòng lặp giúp phân tích mức độ đạt được mục tiêu, đảm bảo quá trình phát triển tiến triển hiệu quả Sáu thực hành tốt nhất dưới đây tạo nền tảng vững chắc cho quy trình RUP, giúp nâng cao chất lượng dự án và đảm bảo sự linh hoạt trong quản lý dự án phần mềm Việc liên tục đánh giá và điều chỉnh theo các thực hành này giúp tối ưu hóa hiệu suất và đáp ứng tốt hơn các yêu cầu của khách hàng.
- Phát triển phần mềm lặp
- Quản lý các yêu cầu
- Sử dụng các kiến trúc dựa trên thành phần
- Mô hình phần mềm trực quan (với ULM)
Thẩm định chất lượng liên tục đảm bảo kiểm tra toàn diện không chỉ sản phẩm cuối cùng mà còn các yêu cầu, mã nguồn, thiết kế, kế hoạch dự án và các thành phần quan trọng khác trong quá trình phát triển hệ thống Quá trình này giúp xác định lỗi sớm, thúc đẩy cải tiến liên tục và nâng cao chất lượng tổng thể của dự án Áp dụng thẩm định liên tục giúp giảm thiểu rủi ro, tối ưu hóa hiệu suất và đảm bảo các tiêu chuẩn kỹ thuật được duy trì xuyên suốt vòng đời phát triển.
Quản lý thay đổi là quá trình quan trọng giúp điều phối các hoạt động và cấu hình để đảm bảo sự ổn định và liên tục của hệ thống Điều này bao gồm quản lý tiến trình thay đổi và các thành phần bị thay đổi nhằm giảm thiểu rủi ro và tối ưu hóa hiệu quả Việc quản lý thay đổi hiệu quả giúp tổ chức thích nghi nhanh chóng với các yêu cầu mới và duy trì sự liên tục trong hoạt động.
Khung nhìn quy trình
2.9.1 Biểu đồ trình tự đăng ký
2.9.2 Biểu đồ trình tự đăng nhập
2.9.3 Biểu đồ trình tự khách hàng thêm đồ uống vào giỏ hàng:
2.9.4 Biểu đồ trình tự khách hàng đặt đồ uống:
Khung nhìn vật lý
Biểu đồ triển khai hệ thống
Kích cỡ và hiệu suất
Giao diện trực quan, dễ dàng sử dụng
Các thông tin nội dung về thông tin mặt hàng, thông tin người dùng đầy đủ và chính xác
Ứng dụng hoạt động ổn định mượt mà trên nhiều nền tảng, ít xảy ra lỗi, nếu có lỗi cần khắc phục nhanh chóng kịp thời
Nhược điểm của mô hình mvvm :
Khả năng duy trì của hệ thống khi theo dõi lượt xem có thể được gán bằng biến hoặc biểu thức, giúp quản lý logic dễ dàng hơn theo thời gian Tuy nhiên, các logic không liên quan dễ gia tăng, gây khó khăn trong việc mở rộng và thêm mã vào XML Đối với các dự án nhỏ, việc áp dụng mô hình MVVM có thể gây cồng kềnh và tốn thời gian trong quá trình phát triển Ngoài ra, việc trung chuyển dữ liệu giữa các thành phần cũng tiêu tốn nhiều thời gian và công sức, khiến quá trình phát triển trở nên phức tạp hơn.
Việc xây dựng một module data chỉ expose các interface và class cần thiết giúp đảm bảo tính linh hoạt trong quá trình phát triển phần mềm Khi gần kết thúc giai đoạn phát triển và cần thay đổi nguồn dữ liệu (data source), việc này trở nên dễ dàng hơn nhiều Module app chỉ tương tác với interface và model, không phụ thuộc vào implementation cụ thể của data source, giúp việc thay đổi dữ liệu diễn ra trơn tru mà không cần can thiệp vào phần còn lại của hệ thống Điều này tối ưu hóa khả năng mở rộng và bảo trì ứng dụng, đảm bảo sự linh hoạt trong quá trình phát triển phần mềm.
Thiết lập sơ đồ dependency trong các dự án có nhiều module có thể gặp khó khăn và đòi hỏi sự cân nhắc cẩn thận để đảm bảo quá trình inject diễn ra hợp lý Việc quản lý dependency đúng cách giúp tối ưu hóa cấu trúc dự án, giảm thiểu lỗi và nâng cao hiệu quả phát triển ứng dụng Đảm bảo các module được tích hợp chính xác sẽ giúp dự án mở rộng dễ dàng hơn và duy trì tính linh hoạt trong quá trình phát triển.
Có ứng dụng trong đời sống, đáp ứng nhu cầu đặt đồ uống tiện lợi nhanh chóng của mọi người đang ngày càng tăng cao
CHƯƠNG 3 DEMO APP ĐẶT ĐỒ UỐNG