Chúng tôi đang xây dựng một ứng dụng bằng cách sử dụng mẫu MVVM, chúng tôi có bộ điều khiển kết nối tất cả chế độ xem và chế độ xem bằng DI. Tất cả các ví dụ về MVVM tôi đã thấy thực sự đơn giản và có 1 lượt xem. Làm thế nào để/nên viewmodels nói chuyện lại với bộ điều khiển? Bộ điều khiển biết về các mô hình và khung nhìn, liệu viewmodel có gửi các sự kiện trở lại bộ điều khiển không? Trường hợp tiết kiệm sẽ xảy ra ở đâu? Mô hình? Bộ điều khiển?Bộ điều khiển trong MVVM, Cách nhận thông tin từ viewmodel đến bộ điều khiển của nó?
Trả lời
Chúng tôi cũng sử dụng Bộ điều khiển nhưng trong trường hợp của chúng, chúng chịu trách nhiệm về quy trình làm việc của ứng dụng. Bộ điều khiển biết ViewModel và Model nhưng không phải là View cụ thể vì nó sẽ được IoC Container tiêm vào.
Nếu bạn quan tâm đến một ví dụ cho thấy nhiều hơn chỉ là một giao diện người dùng (hộp thoại modal, thuật sĩ với công việc có điều kiện) thì bạn có thể có một cái nhìn tại địa chỉ:
WPF Application Framework (WAF) - http://waf.codeplex.com
ViewModel của bạn có thể không phụ thuộc vào IController hay một số giao diện khác, vì vậy họ có thể nói chuyện với nó? Tôi cố gắng giữ nhiều logic ứng dụng ra khỏi ViewModel nhất có thể, vì các lớp này có thể dễ dàng trở nên cồng kềnh.
MyViewModel(IController controller)
{
this.controller = controller;
}
void Save()
{
this.controller.Save();
}
Tôi đồng ý rằng khung MVVM có xu hướng quá đơn giản với mẫu của họ. Đặc biệt, việc di chuyển giữa các khung nhìn/màn hình trong ứng dụng của bạn là điều tôi muốn xem thêm ví dụ về. Tôi tạo một giao diện IViewManager, để cho phép các ViewModels của tôi yêu cầu chúng ta chuyển sang một khung nhìn khác.
Vâng điều khiển biết về viewmodel, chúng tôi không muốn có một sự phụ thuộc 2 chiều xảy ra hoặc các cơ hội mà một ViewModel của tôi được tái sử dụng bằng cách điều khiển khác. – nportelli
Hmmmm, tôi không hoàn toàn chắc chắn rằng tôi hiểu mẫu bạn đang sử dụng. Bạn đang nói bạn có một bộ điều khiển cho mỗi lần xem? Đó không phải là MVC nhiều hơn MVVM? Có thể bạn có thể thêm một chút mã ví dụ vào câu hỏi của mình để cho biết cách bạn tạo chế độ xem và chế độ xem. –
Một bộ điều khiển cho mỗi lần xem không, một bộ điều khiển cho mỗi trường hợp sử dụng. Xin lỗi nếu tôi không nói rõ. – nportelli
Tôi sử dụng thiết lập tương tự cho bạn. Trong bộ điều khiển của tôi, nơi mà DI và xem tiêm của tôi đi xuống, tôi đôi khi giữ tham chiếu đến ViewModel (mà giữ View). Một số trường hợp tôi có thể có một sự kiện trên máy ảo được xử lý bởi bộ điều khiển. Trong trường hợp cực đoan khác (như VM/V được tạo bên ngoài bộ điều khiển, nói trong một máy ảo khác), tôi thậm chí có thể sử dụng EventAggregator (với một ref mạnh) để nghe các sự kiện có thể được kích hoạt trên máy ảo. Trong trường hợp đó, một ref được lưu trữ cho VM là không cần thiết.
Bộ điều khiển của chúng tôi không biết về VM. Chỉ cần và giao diện để xem. VM được tiêm từ đó. Ý tưởng là bộ điều khiển không biết về mẫu mà giao diện người dùng đang triển khai, vì vậy chúng tôi có thể dễ dàng trao đổi giao diện người dùng dễ dàng. Điều này dẫn đến các vấn đề của chúng tôi. – nportelli
Làm thế nào về việc sử dụng các sự kiện trong đó bộ điều khiển đăng ký các sự kiện VM hoặc sử dụng một mẫu trung gian hòa giải trong đó một bộ hòa giải được tiêm vào máy ảo.
Trong trường hợp ứng dụng có nhiều mô-đun và yêu cầu tách các mối quan ngại tôi khuyên bạn nên sử dụng khung lăng kính.
- 1. Cách nhận phản hồi của bộ điều khiển từ bên trong bộ điều khiển khác?
- 2. Nhận giá trị điều khiển HTML trong Bộ điều khiển
- 3. Lấy tên bộ điều khiển từ bộ điều khiển chính nó
- 4. Cách truy cập bộ điều khiển khác từ bên trong bộ điều khiển Symfony2
- 5. Cách gửi yêu cầu đến "j_spring_security_check" từ bộ điều khiển
- 6. ZF2: Nhận thông số url trong bộ điều khiển
- 7. Bộ điều khiển Web2py có thông số?
- 8. Cách: Bộ điều khiển điều hướng trong Bộ điều khiển thanh tab
- 9. Làm cách nào để truy cập Bộ điều khiển Xem từ bộ điều khiển thanh tab?
- 10. Bộ điều khiển mỏng
- 11. Chuyển hướng đến hành động trong bộ điều khiển khác
- 12. Spring MVC, gọi bộ điều khiển khác từ Bên trong bộ điều khiển
- 13. AngularJS: Đọc thông số tuyến từ trong bộ điều khiển
- 14. Làm thế nào để sử dụng UISearchDisplayController từ bộ điều khiển trong bộ điều khiển UITabBar?
- 15. Khi nào sử dụng bộ điều khiển Bộ điều khiển không dây (Bộ điều khiển không đồng bộ, servlet 3)
- 16. Nhận tên máy từ bộ điều khiển Rails
- 17. chuyển dữ liệu từ bộ điều khiển đến Loại symfony2
- 18. Đi từ Bộ điều khiển đến Chế độ xem
- 19. Bộ điều khiển trong Grails
- 20. Xác thực Rails từ bộ điều khiển
- 21. Di chuyển trở lại từ Bộ điều khiển sang một bộ điều khiển trước
- 22. Thay đổi URL từ bộ điều khiển?
- 23. Bộ tách điều khiển MVC của Spring từ HTTPServlet
- 24. cách chuyển một biến từ bộ điều khiển này sang bộ điều khiển khác trong Bộ mã đánh số
- 25. Ngủ trong bộ điều khiển
- 26. Điều khiển bộ điều khiển đến không gian tên: admin đến/admin
- 27. Redirect từ bộ điều khiển nhúng
- 28. ASP.NET MVC và JQuery nhận thông tin về bộ điều khiển
- 29. Kết hợp Bộ điều khiển Điều hướng với Bộ điều khiển Thanh tab
- 30. Apple làm cho bộ điều khiển của nó chứa các bộ điều khiển khác như thế nào?
Ya chúng tôi đang làm những điều ngược lại. Bộ điều khiển của chúng tôi biết về giao diện xem và chèn mô hình và mô hình xem. – nportelli