C# 在何处放置专门用于VM和服务的逻辑

C# 在何处放置专门用于VM和服务的逻辑,c#,wpf,mvvm,mef,C#,Wpf,Mvvm,Mef,因此,我重构了我的许多代码,使其符合MVVM体系结构。我用的是MEF和Caliburn Micro,但我有一个难题/问题 我的ObjViewModel有一些属性,如“IsAddObjToggleChecked”等,并且有一些逻辑需要检查此属性,即如果选中此属性,则执行一些业务逻辑。现在我不想在viewmodel中使用这种逻辑,因为viewmodel有800行,并且有“业务逻辑”——我有我的ObjService,它将自身注入到我的viewmodel中,并包含一个Obj的可观察集合,其中Obj是我的

因此,我重构了我的许多代码,使其符合MVVM体系结构。我用的是MEF和Caliburn Micro,但我有一个难题/问题

我的ObjViewModel有一些属性,如“IsAddObjToggleChecked”等,并且有一些逻辑需要检查此属性,即如果选中此属性,则执行一些业务逻辑。现在我不想在viewmodel中使用这种逻辑,因为viewmodel有800行,并且有“业务逻辑”——我有我的ObjService,它将自身注入到我的viewmodel中,并包含一个Obj的可观察集合,其中Obj是我的数据模型

问题是,我可以把这个业务逻辑放在哪里?由于业务逻辑使用的是可观察的数据模型集合,因此数据模型放在其中没有意义。我想把它放在我的ObjService类中,但是我怎么能把包含viewmodel属性的业务逻辑放在里面呢?是否将参数传递到服务中?这样是否不会产生紧密耦合

然后我考虑使用一个完全独立的单例类,比如ObjHelper类。。。。要执行它需要的逻辑,但是如果我们传入这些助手函数/业务逻辑中使用的属性,viewmodel如何知道它们已被更改


因此,我对这一切的走向感到困惑。

当您有一个大型类,并且它具有一些功能时,通常的方法是创建一个新类并将其注入。当有很多这样的类时,通常会注入某种容器类,而容器类本身就注入了这些类。当然也有一些变化,比如工厂模式或者桥接对象,比如中介。问题是这门课是什么?如上所述,它需要能够引用/修改viewmodel的几个属性,但它同样是其他viewmodel可以访问的单例/服务。如果不是因为代码中包含的几个viewmodel属性,我会将这些都放在ObjService中,我不确定它们应该如何分离,或者它们是否应该作为参数传入……这取决于具体情况。这意味着你的问题相当广泛。如果您希望它是一个单例,那么您需要将这些变量传递给您正在调用的任何方法。然后,如果需要更改属性,可以在调用vm中设置它们。如果这些属性是广泛的,那么它可以将viewmodel的一个实例作为一个参数,但是它的作用会变得有些模糊。。。也许我可以创建一个实现原始服务的服务,在服务中我可以有一个bool属性,比如“CanAddObj”,那么也许我可以有某种双向绑定?即,如果
IsAddObjToggleChecked
bool设置为true,则服务中的
CanAddObj
bool设置为true。。。虽然我不知道怎么做。。。服务不应该知道除数据模型之外的任何信息。