2010-07-19 24 views
5

Xin lỗi nếu đây là bản sao, Tuy nhiên, không quá nhiều 'MVVM' là gì, nhưng đúng hơn là 'MVVM này', tôi đã đọc khá một chút và nghĩ rằng tôi có kiến ​​thức cơ bản về nó là gì , Tôi đã có 'một lớp lót' của riêng mình, như vậy, về cách tôi diễn giải nó, nhưng muốn chắc chắn rằng nó chính xác trước khi tôi kiên định ăn nó trong đầu tôi,Một câu hỏi khác của MVVM ... Sự hiểu biết của tôi có đúng không?

Về cơ bản; Mô hình là dữ liệu thuần túy - không có phương thức, có một ViewModel cho mỗi Model, nó giữ một tham chiếu đến Model - nó thực hiện tất cả các thay đổi đối với dữ liệu Models và cuối cùng View sẽ giữ một (hoặc nhiều) ViewModel reference (s) và format & hiển thị dữ liệu do ViewModel cung cấp.

(Không phải sau liên kết đến các hướng dẫn, blog vv, chỉ cần một có, hoặc không có tinh chỉnh sẽ ổn thôi, như tôi sẽ phải đọc lại tất cả mọi thứ một lần nữa anyway nếu không :))

Trả lời

7

Không hoàn toàn - ít nhất, không phải như tôi sẽ hoàn toàn xác định nó.

Mô hình không phải là dữ liệu thuần túy. Mô hình là một phần của ứng dụng của bạn hoàn toàn dành riêng cho miền và không có thông tin "liên quan đến bản trình bày".

Điều này thường sẽ bao gồm tất cả dữ liệu của miền cụ thể, nhưng cũng có khả năng là logic kinh doanh thuần túy và truy cập dữ liệu, v.v. Bất kỳ điều gì cụ thể cho logic nghiệp vụ và quy trình chứ không phải là một phần của "hiển thị" một phần của mô hình.

Ngoài ra, mặc dù "một ViewModel cho mỗi mô hình" là hình thức làm việc phổ biến nhất, có những lúc bạn có thể trưng ra lớp "mô hình" thông qua nhiều Chế độ xem. Điều này có thể hữu ích, ví dụ, nếu bạn đang cố gắng để lộ chỉ một phần của một mô hình để thiết kế của bạn, vì nó cho phép bạn thực hiện một lớp ViewModel nhỏ hơn. ViewModel điều chỉnh mô hình để làm việc với Chế độ xem - nếu toàn bộ Mô hình không được yêu cầu, bộ điều hợp này có thể được làm nhỏ hơn (và dễ kiểm tra hơn, có thể bảo trì, vv) bằng cách chỉ làm việc với phần được yêu cầu.

Cá nhân, tôi thích suy nghĩ về "một ViewModel cho mỗi Chế độ xem", vì ViewModel có thể điều chỉnh một hoặc nhiều mô hình để hoạt động phù hợp với Chế độ xem đã cho, nhưng thậm chí sau đó, đôi khi rất hữu ích để trao đổi ViewModel trong cùng một View để thay đổi nội dung.

+0

+1, về cơ bản những gì tôi sắp viết. –

1

Về cơ bản, có . Thực tế, không thực sự. Thực hành tốt nhất là luôn giảm phụ thuộc và phân chia trách nhiệm của bạn giữa các lớp theo tỷ lệ 1: 1, nhưng bạn sẽ tìm thấy các tình huống IRL, nơi không dễ dàng trở thành một người theo chủ nghĩa thuần túy của MVC.

Tôi nghĩ rằng thái độ tốt nhất là làm hết sức mình, sau đó ghi lại phần còn lại. Đừng đổ mồ hôi quá nhiều.

0

Điều đó khá gần. Ngoại trừ không đúng khi nói rằng Mô hình chỉ là dữ liệu thuần túy. Nó có thể và nên chứa các phương pháp để thực hiện các trường hợp sử dụng khác nhau chống lại nó.

4

Đóng, nhưng không hoàn toàn. Dưới đây là một số điểm khác với điểm của bạn:

  1. Mô hình có thể có phương pháp trên chúng. Chúng không chỉ là dữ liệu. Họ có thể có các phương thức như "truy xuất", "lưu trữ", v.v. Mã logic nghiệp vụ. Xem thuyết bất khả tri.

  2. Không giới hạn số lượng Chế độ xem có chứa tham chiếu đến Mô hình. ViewModels đóng gói hành vi cấp chế độ xem, vì vậy bạn có thể có nhiều tập hợp hành vi khác nhau cho cùng một mô hình. Ví dụ, một ViewModel có thể là một phép biến đổi chỉ đọc của một mục mô hình. Khác có thể cung cấp xác nhận biểu mẫu đọc/ghi trên cùng một mục mẫu.

  3. Có thể có nhiều hơn một ViewModel cho mỗi lượt xem, dựa trên hành vi bạn muốn. Ví dụ: bạn có thể bao gồm hành vi "nội dung cao cấp" với một chế độ ViewModel và "nội dung miễn phí" với một ViewModel khác nhưng vẫn duy trì cùng một chế độ xem.

1

Có rất nhiều thông tin tuyệt vời ở đây và tôi nghĩ rằng hầu hết các câu trả lời đều đúng. Tôi không nghĩ có bất kỳ định nghĩa cụ thể nào, cũng như không có 1 cơ quan cụ thể nào về vấn đề này. Ngay cả microsoft không thực sự có định nghĩa rõ ràng về điều này.

Một mục tôi sẽ thêm không có trong tên MVVM, nhưng phổ biến cho tất cả các triển khai MVVM mà tôi quen thuộc. Đây là một hệ thống Nhắn tin hoặc Thông báo, dường như luôn được liên kết dưới dạng nền tảng cho ViewModel. Nhắn tin chỉ thông báo cho Chế độ xem khi mọi thứ thay đổi có thể ảnh hưởng đến người khác. Thực hiện tốt điều này trong tâm trí cho phép Xem Mô hình và Chế độ xem để cả hai đều không thuyết phục về những thứ họ không liên kết trực tiếp bằng cách sử dụng thông báo chung chung.

Lợi ích của toàn bộ khuôn mẫu theo ý kiến ​​của tôi là làm cho bạn áp dụng với các phần mô-đun, có thể hoán đổi với càng ít phụ thuộc vào loại càng tốt.

Đây là một phần thiếu thực sự trong tâm trí của tôi, vì nó cung cấp cùng một lợi ích/chức năng mà bạn thu được từ logic điều khiển riêng biệt trong mẫu MVC.

0

Hiểu biết của bạn sai. Bạn có thể có một vài Mô hình và tất cả chúng đều có Chế độ xem riêng và sau đó là một phần của một ViewModel. Ví dụ: Bạn có Mô hình: Sản phẩm, Khách hàng Mỗi mô hình có Chế độ xem riêng được thể hiện dưới dạng Kiểm soát tùy chỉnh Và bạn có một ViewModel kết hợp tất cả các mô hình của bạn và cuối cùng trên cửa sổ ứng dụng của bạn. nói chuyện với Mô hình của bạn qua ViewModel

0

Hãy suy nghĩ về mô hình như thế này. Mô hình là hệ thống của bạn, thịt và rau củ của những gì hệ thống làm. Những cân nhắc duy nhất nó có là làm thế nào để làm công việc của nó, không phải làm thế nào nó sẽ được sử dụng. Nó cho thấy sự kiện, thuộc tính và phương pháp được xác định ở cấp hệ thống, nhưng nó không có khái niệm về những gì sẽ được nhấn nút của nó (hoặc nếu nó thậm chí có các nút!). Nó không cố định dạng dữ liệu thành định dạng thân thiện với người dùng hơn, nó định dạng dữ liệu của nó theo cách thân thiện với mô hình.


Mô hình chế độ xem là UX (trải nghiệm người dùng). Nó định nghĩa cách bạn sẽ sử dụng hệ thống. Nó định nghĩa (thông qua các lệnh và các thuộc tính công khai) người dùng định hướng truy cập vào hệ thống. Đây là cây cầu mà người dùng sẽ sử dụng để vào hệ thống. Nó liên kết với các sự kiện của mô hình, và thông qua các lệnh của nó, nó sẽ cung cấp truy cập vào các chức năng của mô hình.

Cần xử lý xác thực, (tuổi đó là độ tuổi hợp lý?) Truy xuất dữ liệu, chuyển đổi và lưu vào bộ nhớ cache của các bản ghi trong khi chúng đang được hiển thị. Vì vậy, ví dụ, bạn đang xem xét một hồ sơ bệnh nhân, viewmodel lấy dữ liệu từ mô hình, và lưu trữ nó trong nội bộ, sau đó xuất bản này để xem. Điều gì sẽ xảy ra nếu mô hình thông báo cập nhật cho dữ liệu đó? Ném dữ liệu đã lưu vào bộ nhớ cache? nếu bạn đã chỉnh sửa nó thì sao? Điều này tùy thuộc vào bạn và hành vi này nên được xác định trong mô hình khung nhìn.

Mô hình chế độ xem là "hợp đồng" về chức năng và dữ liệu được hiển thị cho người dùng (thông qua chế độ xem). Mô hình xem không có khái niệm về CÁCH nó sẽ được hiển thị hoặc tương tác với. Các lệnh nên được đặt tên ở một mức chức năng, chẳng hạn như RefreshList, NOT MouseClickHandler.


Cuối cùng, chế độ xem. Đây chỉ đơn giản là một biểu diễn hiển thị của những gì có trong mô hình khung nhìn. Các nút và menu vv sẽ liên kết với các lệnh. Các trường liên kết với các thuộc tính và sẽ cập nhật tự động thông qua ma thuật ràng buộc.

Nếu bạn từng thấy mình đang làm: "text1.text = value" bạn đang làm sai. Nếu bạn từng thấy mình viết một trình xử lý lệnh có nội dung "my.ViewModel.SomeCommand" thì bạn đang làm sai.

Các vấn đề liên quan