MVC là một bài tập trong Tách biệt các mối quan tâm , một kiến trúc UI. Đó là một cách để củng cố sự phức tạp có thể xảy ra trong giao diện người dùng do bản trình bày không được tách rời khỏi nội dung .
Về lý thuyết, tất cả các đối tượng có thể có hành vi hoạt động trên dữ liệu mà chúng chứa và dữ liệu và hành vi đó vẫn được gói gọn . Trong thực tế, một đối tượng OOP nhất định có thể có hoặc không có logic tương ứng với dữ liệu của nó hoặc có thể không có bất kỳ logic nào ( ví dụ: Đối tượng truyền dữ liệu ).
Trong MVC, logic nghiệp vụ đi theo mô hình chứ không phải bộ điều khiển. Bộ điều khiển thực sự chỉ là một phần giữa để kết hợp Chế độ xem và Mô hình. Vì vậy, trong mô hình, bạn có thể có dữ liệu và hành vi ở cùng một nơi.
Nhưng ngay cả sự sắp xếp đó cũng không đảm bảo hợp nhất dữ liệu / hành vi. Các đối tượng chỉ chứa dữ liệu có thể được vận hành bởi các lớp khác chỉ chứa logic và đây là cách sử dụng OOP hoàn toàn chấp nhận được.
Tôi sẽ cho bạn một ví dụ cụ thể. Đây là một chút giả định, nhưng giả sử bạn có một Currency
đối tượng và đối tượng đó có khả năng tự đại diện bằng bất kỳ loại tiền tệ có sẵn nào, được chốt bằng đồng đô la. Vì vậy, bạn sẽ có các phương pháp như:
public decimal Yen { get { return // dollars to yen; } }
public decimal Sterling { get { return // dollars to sterling; } }
public decimal Euro { get { return // dollars to euro; } }
... Và hành vi đó sẽ được gói gọn với đối tượng Tiền tệ.
Nhưng nếu tôi muốn chuyển tiền từ tài khoản này sang tài khoản khác hoặc gửi một số loại tiền thì sao? Hành vi đó cũng sẽ được gói gọn trong đối tượng Tiền tệ? Không, nó sẽ không. Tiền trong ví của bạn không thể tự chuyển ra khỏi ví vào tài khoản ngân hàng của bạn; bạn cần một hoặc nhiều đại lý (giao dịch viên hoặc ATM) để hỗ trợ nhận số tiền đó vào tài khoản của bạn.
Vì vậy, hành vi đó sẽ được gói gọn trong một Teller
đối tượng và nó sẽ chấp nhận Currency
và Account
các đối tượng là đầu vào, nhưng nó sẽ không chứa bất kỳ dữ liệu nào, ngoại trừ một chút trạng thái cục bộ (hoặc có thể là một Transaction
đối tượng) để giúp xử lý các đối tượng đầu vào.