2013-02-16 27 views
1

我有一些創建和編輯具有公共屬性的視圖模型。我已經在網上看到,對視圖模型使用繼承是邪惡的。所以,我想知道有這些類型的視圖模型是安全的。是繼承被認爲是安全的查看模型

public class CustomerVM 
{ 
    public int CustomerId {get;set;} 
    public string Name { get; set;} 
} 

public class CustomerCreateVM : CustomerVM 
{ 
    public dictionary<string,string> ModelCustomers { get; set;} 
} 

public class CustomerEditVM : CustomerVM 
{ 
    public List<Orders> OrdersList {get;set;} 
} 

CustomerVM未在應用程序中使用,它僅用於存儲常用屬性。

+0

只要視圖模型具有明確的範圍和責任,我就沒有問題(並且不會出現技術限制)。但是,您可以針對此問題獲得一打不同的答案。 – 2013-02-16 01:59:59

+0

是的,我試着在網上搜索這個。那些表示不合適的帖子暗示了繼承的構成。但我不明白如何在這裏使用組合,並想知道繼承的真正問題。 – Sunny 2013-02-16 02:04:53

+0

這種東西沒有銀彈。通常我所有的viewmodel都是從Prism框架繼承的NotificationObject。我有時會爲共同點創建基本視圖模型,但真的很少見,並且小心謹慎。我喜歡每個ViewModel儘可能獨立 – 2013-02-16 02:06:38

回答

2

論據:

「最佳實踐」的理念正在越來越走向「胖模型」。所以模型驅動設計非常重要。因此,具有排列和抽象是可取

參數反對:

由於模型是真正爲將數據傳遞到視圖,簡單是最好的。這起到了「控制器主導邏輯」的思想。

摘要: 絕對不是邪惡。

甚至沒有壞。建議與否取決於您是否爭取用於數據處理的「肥胖」複雜模型/「瘦」控制器或簡單(更多至點非複雜)模型。

我親自指導模型的簡單性。但是我已經看到了足夠多的控制者來欣賞對方。

0

俗話說「贊成構造而非繼承」。在CustomerEdit上使用CustomerVM屬性會比以這種方式使用繼承更好。在你發佈的簡單案例中,我不認爲這太重要,但是隨着系統的增長,如果你習慣於使用繼承,隨着模型複雜度和層次結構深度的增加,事情會變得越來越醜陋。

+0

原因我不熟悉組成是與對象直接相關的屬性將像objCustomerVM.CustomerCreateVM.ModelCustomers類似,但與繼承它將objCustomerCreateVM.ModelCustomers。 – Sunny 2013-02-19 16:06:32