2016-09-23 112 views
1

我正在開發一個wpf應用程序,並且我的主視圖模型ctor看起來像這樣。正如你所看到的,其他虛擬機通過ctor注入來注入。我需要這樣做,因爲需要所有視圖模型來填充主菜單。Wpf主視圖有很多其他視圖模型依賴關係的模型

但這看起來並不正確。最初,由於應用程序很簡單,我沒有感覺到任何問題,但隨着應用程序的不斷增長,我認爲ctor參數的數量正在增加,這是不對的。在我看來,單一責任原則是違反

public MultiControllerHomeViewModel 
(
    MultiControllerViewModel MCvm, 
    VigilantProcessListViewModel VPLvm, 
    MailSettingsViewModel MSvm, 
    DropboxSettingsViewModel DBSvm, 
    PushbulletSettingsViewModel PBSvm, 
    GeneralHelpViewModel GHvm, 
    LoginViewModel Lvm 
) 
{...} 

有人可以請建議我如何處理這個?

+2

對我來說,就像單一職責原則一樣,如果您正在做的是正確的事情,如果您的MCHVM類的唯一責任是成爲許多視圖模型的聚合。但是如果它還有其他角色可以執行,那麼你可能希望將該類分成更小的類,每個類只執行一個角色,並且無疑需要更少的子VM提供。 – LordWilmore

回答

3

您可以創建一個MainMenuViewModel,這只是爲主菜單提供數據。 MainMenuViewModel將採用所有其他視圖模型作爲構造函數參數,但由於它沒有其他任何東西,它不會違反單責任原則。

根據您的代碼,您的MultiControllerHomeViewModel可能必須將MainMenuViewModel作爲構造函數參數。

+0

合理。謝謝。 – VivekDev

+0

很高興幫助。考慮將其標記爲接受的答案。 –