Trong ứng dụng WPF của tôi, tôi sử dụng mẫu MVVM cùng với tiêm phụ thuộc.Dữ liệu cũ trong Mô hình Chế độ xem MVVM với phụ thuộc tiêm
Chế độ xemMô hình chuẩn bị dữ liệu từ cơ sở dữ liệu lấy kho lưu trữ được chèn vào hàm tạo. Chúng cũng cư trú các thuộc tính với dữ liệu từ kho lưu trữ trong hàm tạo.
Chế độ xem tất cả được tạo trong hàm tạo tĩnh của lớp ViewModelLocator mà tất cả các Chế độ xem sử dụng để liên kết với ViewModel của chúng.
này có những nhược điểm sau:
- Dữ liệu trong Views là không bao giờ được cập nhật, không phải ngay cả khi đóng cửa và tái mở chúng, vì dụ ViewModel luôn là như nhau.
- Khi mở chế độ xem đầu tiên, tất cả Chế độ xem được khởi tạo và dữ liệu mà chúng yêu cầu được tải từ cơ sở dữ liệu.
tôi có thể nghĩ đến hai cách để giải quyết những vấn đề này:
- Làm cho mỗi ViewModel thực hiện một phương pháp mà đọc dữ liệu từ cơ sở dữ liệu và khởi tạo các thuộc tính - thay vì làm như vậy trong các nhà xây dựng. Điều này sẽ yêu cầu gọi phương thức đó mỗi khi một khung nhìn được mở ra. Điều này giới thiệu temporal coupling mà tôi không thích.
- Triển khai ViewModelLocator theo cách sao cho nó tạo ViewModel được yêu cầu mỗi khi thuộc tính tương ứng trên ViewModelLocator được gọi. Tôi không thích phương pháp này, bởi vì gốc bố cục của tôi sẽ không được thực thi khi bắt đầu chương trình nhưng sẽ lan truyền trong suốt thời gian hoạt động của chương trình.
Có cách nào khác để giải quyết vấn đề này không? Những người khác giải quyết vấn đề này như thế nào?
Cảm ơn câu trả lời của bạn. Có một nhà máy cho mỗi ViewModels của tôi có vẻ là một chút quá mức cần thiết vì các nhà máy sẽ chỉ được sử dụng ở một nơi và hiện không cần thiết. Hơn nữa họ không làm bất cứ điều gì khác hơn 'container.Resolve' sẽ làm. Vì ViewModelLocator vẫn sẽ là nơi duy nhất mà container sẽ được sử dụng, tôi thích gọi 'container.Resolve' hơn các nhà máy trừu tượng, bởi vì ngay cả trong trường hợp này, thùng chứa sẽ không bị rò rỉ vào mã ứng dụng. Lợi thế duy nhất của các nhà máy trừu tượng mà tôi có thể nghĩ đến là một lỗi ngay lập tức khi bắt đầu (tiếp theo) –
(tiếp theo) nếu cấu hình của vùng chứa sẽ không chính xác. –