Tôi tự hỏi về cách tiếp cận kế thừa với Mô hình Xem trong mẫu MVVM. Trong ứng dụng của tôi, tôi có một mô hình dữ liệu tương tự như sau:Thừa kế MVVM với Mô hình Xem
class CustomObject
{
public string Title { get; set; }
}
class CustomItem : CustomObject
{
public string Description { get; set; }
}
class CustomProduct : CustomItem
{
public double Price { get; set; }
}
Trong ứng dụng của tôi, tôi có một lớp ViewModelBase và sau đó sẽ có các View Models sau:
- CustomObjectViewModel
- CustomItemViewModel
- CustomProductViewModel
Thực hiện thô n của CustomObjectViewModel sẽ giống như sau:
class CustomObjectViewModel : ViewModelBase
{
private readonly CustomObject _customObject;
public CustomObjectViewModel(CustomObject customObject)
{
_customObject = customObject;
}
public string Title
{
// implementation excluded for brevity
}
}
Nó có vẻ hợp lý với tôi rằng Xem Models của tôi sẽ mở rộng bản thân theo cách tương tự như mô hình của tôi đã làm (CustomItemViewModel kéo dài CustomObjectViewModel và vân vân). Tuy nhiên, tôi đã nhận thấy rằng khi tôi đi xuống cây thừa kế, tôi sẽ thêm các tham chiếu bổ sung cho cùng một đối tượng. Điều này có vẻ khá quá mức với tôi và đã tự hỏi làm thế nào để tiếp cận vấn đề này và nếu nó có thể làm cho nó sạch hơn nhiều.
Tôi đã sử dụng mô hình Generics như minh họa ở đây, và tôi có thể nói, tôi đã không thực sự có bất kỳ vấn đề nào với việc có một hệ thống phân cấp thừa kế cho ViewModels. –
Nó chắc chắn sẽ làm việc mà không có vấn đề trong nhiều trường hợp. Tuy nhiên theo quan điểm của tôi, tôi thấy các lớp ViewModel được kết hợp chặt chẽ với Views. Thừa kế giữa các lớp ViewModel sẽ có ý nghĩa nếu các Chế độ xem được liên kết của chúng có chung một số giao diện người dùng chung. –
Tôi đang đối mặt với cùng một kịch bản mà Richard gặp phải, ngoại trừ câu hỏi của tôi là về quan điểm. Tôi có một lớp trừu tượng với 10 trường, và các lớp con khác nhau của nó thêm vào nhiều trường khác (mỗi trường bổ sung thêm trường), tôi nên tạo các khung nhìn khác nhau như thế nào? Tôi không muốn redeclare các lĩnh vực cơ sở trong mỗi người trong số họ (tôi vẫn không chắc chắn về ViewModel chính nó, sẽ đánh giá cao sự giúp đỡ nào về nó quá). – Shimmy