2016-09-23 66 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

很高兴帮助。考虑将其标记为接受的答案。 –