Hỏi đáp

Tìm hiểu mô hình lập trình MVVM chi tiết, so sánh với các mô hình khác

Tìm hiểu về mô hình lập trình MVVM (Model-View-ViewModel). MVVM có thể nói chính là mô hình kiến trúc được rất nhiều nhiều lập trình viên trong cộng đồng lập trình ưa chuộng sử dụng nó. Mô hình này sinh ra dành cho các ứng dụng sử dụng ngôn ngữ XAML để định nghĩa giao diện ứng dụng như: Windows Phone 8.0, 8.1 Silverlight/RT, WPF, Silverlight, Windows RT, Universal Apps,… Lợi ích từ mô hình này mang lại là rất nhiều nhiều. Nhưng lợi ích nổi bật số 1 chính là tách biệt việc thiết kế giao diện và lập trình code logic chưa phụ thuộc nhau. Bài viết này cũng sẽ chỉ rõ những nội dung tổng quát có thể giúp cho bạn có thêm cái nhìn cụ thể MVVM là gì, cách sử dụng , lợi ích của nó…Hãy cũng mình tìm hiểu qua bài viết này nhé.

Giới thiệu mô hình Model-View-ViewModel (MVVM)

Lịch sử phát triển

Kể từ khi Microsoft cho ra mắt hai nền tảng phát triển ứng dụng mới đó là WPF và Silverlight. Trên nên tảng đó đã có nhiều thay đổi trong việc xử lý sự kiện , binding dữ liệu, giữa các tầng của ứng dụng với nhau. Vì vậy, nảy sinh ra nhu cầu phải có một mô hình phát triển ứng dụng mới hợp lý hơn. Do vậy Model – View – ViewModel (MVVM) pattern ra đời và ngày càng trở nên phổ biến, phát triển hơn.

Bạn đang đọc: Tìm hiểu mô hình lập trình MVVM chi tiết, so sánh với các mô hình khác

Mvvm chính là gì

WPF là gì

Mô hình MVVM là gì

MVVM chưa phải chính là framework hay là thư viện, api… nó chỉ đơn thuần chính là hướng dẫn bạn định nghĩa cấu trúc ứng dụng của bạn. MVVM đã được phát triển dựa trên kiến trúc MVP.

Tìm hiểu thêm: Công suất là gì? Công thức tính công suất chính xác 100%

Mô hình mvvm cho phép tách biệt dữ liệu (Model), mã thực thi (logic hay ViewModel) , giao diện người dùng (View).

Trong các mô hình truyền thống, chúng ta thường xử lý sự kiện Click và viết mã thực thi trực tiếp ở trên một Button nhưng với mô hình MVVM không cho phép thực hiện điều này.

Trong mô hình MVVM, các điều khiển(control) như Button, ListView, SearchBar, v.v. chưa thể kết buộc trực tiếp đến dữ liệu mà phải thông qua thuộc tính Command – chính là một thuộc tính kiểu ICommand.

mô hình lập trình mvvm chính là gìmô hình lập trình mvvm là gì

MVVM đã được hiểu như thế nào ?

View:

Thành phần giao diện của ứng dụng. Tương tự như ở trong mô hình MVC, View chính là thành phần duy số 1 mà người dùng có thể tương tác được trong chương trình, nó là thành phần mô tả dữ liệu.

Một điểm khác biệt so với các mô hình khác là View trong mô hình này tích cực hơn. Nó có khả năng làm các hành vi , phản hồi lại người dùng thông qua tính năng là: binding, command.

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ự.

ViewModel:

Lớp trung gian giữa View , và Model. ViewModel có thể đã được xem chính là 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 data binding, command.

Một định nghĩa khác về ViewModel trong mvvm:

ViewModel: Sẽ đảm nhận công việc đồng bộ dữ liệu đến từ model lên View. Mối quan hệ giữa View và View-Model chính là View cũng sẽ đã được ánh xạ tới View-Model nhưng View-Model lại không biết thông tin gì về View. Nó được ẩn dấu qua cách sử dụng Data-binding và cơ chế của mô hình Observer. Một View-Model có thể đã được ánh xạ từ nhiều View.

CC là gì viết tắt của đến từ nào, ý nghĩa CC là gì đầy đủ số 1 mọi lĩnh vực

Một điểm cần lưu ý: Là trong mô hình MVVM, các tầng bên dưới cũng sẽ chưa biết đã được các thông tin gì về tầng bên ở trên nó. ViewModel chưa hề biết gì về View, một ViewModel có thể đã được sử dụng cho nhiều View (one-to-many). ViewModel sử dụng Observer design pattern để liên lạc với View (thường đã được gọi là binding data, có thể là 1 chiều hoặc 2 chiều tùy nhu cầu của ứng dụ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.

cấu trúc thư mục trong mvvmcấu trúc thư mục trong mvvm

Views

Trong thư mục Views chứ các file giao diện. Và mỗi file giao diện đều có class code-behind đi kèm. Đặc biệt file code-behind ta sẽ không sử dụng đến, mọi điều cần làm sẽ chuyển xuống class ViewModel. Tất nhiên là bạn có thể code trong file code-behind của XAML nhưng điều đó sẽ phá vỡ quy ước MVVM. Bạn có thể khai báo thuộc tính datacontext hoặc vài thiết lập khác nhưng nên hạn chế tối thiểu code ở đây. Views được sử dụng để kết hợp với các mô hình MVVM… Nó dùng để cung cấp một sự chia tách gọn gàng của khái niệm giữa UI , và presentation logic , data.

Models

Trong thư mục Models trong đó tạo các class chứa data và bất kỳ liên kết validation, logic nghiệp vụ để chắc chắc tính toàn vẹn của data, bạn có thể tách ra thư mục Repositories khác. Chúng được dùng như một phần của mô hình MVVM.

ViewModels

Tương tự ta cũng tạo một thư mục ViewModels. Thông thường một file giao diện thì ta tạo một class ViewModels tương ứng (có đôi lúc ta tạo nhiều class phụ giúp cho tinh giản file code , và gọi chúng trong class ViewModels chính).

ViewModels cũng sẽ sử dụng các model nếu cần định nghĩa dữ liệu. Sự liên kết giữa View-ViewModel giúp chúng gửi , nhận dữ liệu, để hiểu rõ ta cần tìm hiểu các khái niệm về Binding, DataContext, Behaviors SDK. Nhờ đó ta tách code-behind của View và đưa xuống View Model.

Ngoài ra một lớp ViewModels chứa presentation logic , và state của ứng dụng. ViewModels cần chứa các chức năng của ứng dụng. ViewModels định nghĩa properties, commands, , và events, để chuyển đổi controls trong view cần data-bind.

Data Binding

Data Binding chính là kĩ thuật dùng để tạo gắn kết giữa phần giao diện (UI) , dữ liệu thông qua phần business logic. Nhờ Data Binding, UI có thể tự động cập nhật lại để hiển thị các thay đổi trong dữ liệu. Ngoài ra, Data Binding trong WPF còn hỗ trợ các chiều khác nhau, nghĩa chính là các thay đổi có thể cập nhật từ UI vào dữ liệu. Kĩ thuật binding trong mô hình mvvm thực sự là một bước tiến mới, thỏa mãn những điều mà hầu hết lập trình viên mong đợi.

Nếu như tìm hiểu về tính năng này, bạn cũng sẽ không ngạc nhiên gì khi nhiều người nói rằng data binding chính là thành phần cốt lỗi tạo nên các cơ chế hoạt động trong WPF. mọi người có thể binding dữ liệu nguồn và đích từ bất kì đối tượng nào: như cửa sổ, các control đơn giản như TextBlock cho đến một usercontrol phức tạp.

Tất cả được thực hiện một cách dễ dàng, nhanh chóng, hiệu quả , có thể không cần dùng đến bất kì dòng code-behind (C#, VB.NET, …) nào.

Data Template

Data Template là kĩ thuật dùng để gây nên một khuôn mẫu giao diện. Template chỉ đã được áp dụng cho các Control. Một template trong WPF xác định cách thức , và cấu trúc mà dữ liệu hoặc control cũng sẽ đã được hiển thị ra màn hình.

Nói riêng về Data Template, chức năng này giúp cho dữ liệu (thuộc dạng non-visual) được gắn vào một cấu trúc bao gồm một hoặc nhiều thành phần có khả năng hiển thị. Và do đó, dữ liệu sẽ được hiển thị lên cửa sổ một cách trực quan theo ý muốn của lập trình viên. Cũng như Data Binding, tính năng này chưa yêu cầu bạn phải biết trong code-behind của ứng dụng.

Command

Data Binding , Data Template trong wpf giúp cho cho người dùng thấy đã được những gì có trong dữ liệu , có thể cập nhật lại dữ liệu đó. Tuy nhiên để nhận đã được tương tác đến từ người dùng , xử lý, WPF cung ứng một tính năng gọi là command. Các command có thể đã được xem như dữ liệu , và được cung ứng cho người dùng thông qua chức năng binding.

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.

So sánh ưu điểm , và nhược điểm của MVC MVP , và MVVM

Ở đây mình không so sánh mô hình nào nên dùng hơn mô hình nào, mà tùy trường hợp chúng ta dùng mô hình nào cho thích hợp với dự án của mình. Mình xin nêu ra những ưu nhược điểm của mô hình MVP , mô hình MVVM nhé!

Ưu nhược điểm của MVC là gì?

mô hình mvc cho lập trìnhmô hình mvc cho lập trình

Ưu điểm:

Ý nghĩa của các ký tự R (®), C (©), TM (™) trên sản phẩm

Mô hình MVC có rất nhiều nhiều ưu điểm, cụ thể như là:

Nhẹ, tiết kiệm băng thông: MVC chưa tiêu tốn nhiều viewstate nên rất tiết kiệm băng thông. Các thao tác gửi, nhận dữ liệu đã được diễn ra liên tục. Vì vậy, sử dụng mô hình này website/ ứng dụng hoạt động ổn định hơ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: chúng ta có thể dễ dàng gây nên các mã SEO URL để thu hút lượng truy cập đối với 1 ứng dụng bất kỳ.

Nhược điểm:

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 , 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ó làm 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 hợp lý với các dự án lớn. Với các dự án nhỏ, mô hình này khá cồng kềnh , và tốn nhiều thời gian trong việc trung chuyển dữ liệu.Làm trở ngại trong quá trình điều hướng code của dự án.

Ưu nhược điểm của MVP là gì?

MVP : Model – View – Presenter

mô hình lập trình mvp

Ưu điểm:

Chúng ta dễ dàng viết unit test cho presenter vì nó chưa gắn với bất cứ view, nó hoạt động độc lập với View , không gắn với bất cứ API nào của Android.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.

Nhược điểm:

Mô hình MVP theo thời gian, Presenter cũng sẽ dần lớn lên do bị thêm các business logic rải rác. Người dùng sẽ rất khó để kiểm soát , chia nhỏ code khi Presenter đã quá lớ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: Model – View – ViewModel?

Ưu điểm:

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ả nhất 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à chưa 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ì…

Nhược điểm :

Khả năng duy trì khi view có thể gán cả biến , biểu thức, các logic không liên quan cũng sẽ tăng dần theo thời gian, ảnh hưởng đến việc thêm code vào XML.Đối với dự án nhỏ việc áp dụng mô hình MVVM gây cồng kềnh, tốn thời gian trong quy trình phát triển. Tốn thời gian trung chuyển dữ liệu của các thành phần.Đố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 trở ngại trong việc debug khi cơ sở dữ liệu phức tạp.

Sử dụng mô hình MVC, MVP , và MVVM khi nào?

Bạn nên dùng MVP nếu chưa thể binding dữ liệu qua DataContext (ví dụ như với Windows Forms).

Mô hình MVVM thì nên dùng trong trường hợp có thể binding dữ liệu thông qua DataContext (ví dụ như: WPF).

Còn đối với MVC nên sử dụng khi việc kết nối giữa View và các phần còn lại của ứng dụng không phải lúc nào cùng available (ví dụ như web API). Khi đó, bạn không thể sử dụng MVP hoặc MVVM tốt nhất được , và bắt buộc phải chọn mô hình MVC.

Kết luận:

MVVM có thể nói chính là mô hình kiến trúc được rất nhiều lập trình viên ưa chuộng , và sử dụng. MVVM đã kế thừa những ưu điểm vốn có của MVP, kết hợp với những lợi thế của data binding đem đến một pattern có khả năng phân chia các thành phần với từng chức năng riêng biệt, dễ dàng trong việc maintain, redesign. MVVM cũng đem lại nguy cơ test rất nhiều dễ dàng, giúp cho thực hiện việc hiệu quả nhất hơn cho lập trình viên.

Cảm ơn chúng ta đã đọc bài viết của mình. Mong nhận đã được nhiều sự góp ý từ phía bạn.

Ngôn ngữ lập trình C sharp là gì

Tài liệu tham khảo: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel

Bài viết cùng chủ đề:

WPF C# cơ bản là gì? So sánh wpf với winform

Đăng kí khóa học lập trình tại Unica để đã được giảm tới 40% học phí, link đăng kí tại đây.

Nghiệp vụ nhà hàng – khách sạn là gì , những điều cần biết

Tìm hiểu thêm: Dịch Thuật Công Chứng Tư Pháp là gì vậy? Quy Trình Công Chứng Tư Pháp