2009-08-17 30 views
5

Tôi đã phát triển một số mã WPF dựa trên MVVM và đang cần một số tái cấu trúc nhỏ nhưng trước khi thực hiện điều đó, tôi cần phải quyết định kiến ​​trúc tốt nhất.Mẫu MVVM và dữ liệu bán toàn cầu

Tôi bắt đầu với một ứng dụng có thể trình bày một số biểu diễn tương tự (nhưng riêng biệt) về dữ liệu của tôi. Hãy gọi nó là RecordsViewModel có số RecordsView tương ứng. Khi thời gian trôi qua, tôi đã giới thiệu một số SettingsViewModel được chuyển vào hàm tạo của RecordsViewModel và được hiển thị rõ ràng (cho phép RecordsView sử dụng nó). SettingsViewModel được đăng ký để thay đổi được phản ánh trong tất cả các chế độ xem của tôi.

Bây giờ tôi muốn chia RecordsView một chút vì giờ đây nó có hai chế độ xem riêng biệt.

Vấn đề tôi có là:

  • mới (RecordsMainViewRecordsAlternativeView) đều muốn xem Cài đặt.
  • không giống như trước đó RecordsView được lập trình ngay lập tức, các chế độ xem mới này được khởi tạo từ Xaml (hàm tạo mặc định).

Vì vậy, lựa chọn của tôi dường như là:

  1. Walk the Tree mẫu trở lên để tìm cha mẹ với một Cài đặt
  2. Hãy Cài đặt một DependencyProperty trên các điều khiển và làm cho XAML tham gia sở hữu đến ví dụ.
  3. Tạo SettingsViewModel một Singleton.

Bất kỳ tùy chọn nào khác, tốt hơn? Bạn sẽ cân nhắc điều gì nhất?

Trả lời

3

Tôi sẽ biến logic cài đặt thành dịch vụ (ISettingsService) và sử dụng bộ định vị dịch vụ hoặc phụ thuộc để truy cập dịch vụ đó từ bất kỳ mô hình xem nào cần.

Dịch vụ tuyệt vời để quản lý trạng thái được chia sẻ và định vị dịch vụ/DI giúp việc VM của bạn dễ dàng tham khảo dịch vụ. Lưu trữ trạng thái chia sẻ trong một máy ảo là một chút hacky và - như bạn đã tìm thấy - không thực sự mở rộng. Một nguyên tắc nhỏ có thể là tự hỏi liệu trạng thái trong máy ảo có tồn tại chỉ để hỗ trợ chế độ xem tương ứng hay không hoặc liệu các thành phần khác có cần quyền truy cập vào trạng thái đó hay không. Nếu sau này, di chuyển nó vào một dịch vụ.

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