我正在以MVVM模式开发Window-App WPF项目。目前,该应用程序有点简单(无法真正解释产品的性质),但最终有望成长为更复杂的应用程序。
我决定使用多个项目,这是我到目前为止所做的:
我只想问:
这个架构有点过度杀人吗?
我是否需要为业务逻辑创建 Product.Windows.Business ?或者我应该将业务逻辑放在ViewModels中吗?
提前谢谢你:)
答案 0 :(得分:1)
我目前正在开发具有类似结构的应用。项目结构看起来不错。在我的项目中,我做了一些不同的事情。
Data和ServiceClients程序集可能代表您的DAL。它们很好,它们在不同的组件中分开。在数据程序集中,您将拥有存储库,而在ServiceClients中,您将拥有服务代理程序。实体和合同程序集可能代表您的BL。在这里,我认为你可以使用一个组件。这个程序集应该由两个DAL程序集引用。
很好,日志记录是单独实现的,如果你有安全性,这也应该在Common中实现。从我最近阅读的一本很好的书,.NET中的依赖注入,utils&助手是设计不佳/不完整的结果。这些类通常包含静态方法。但我不认为这与讨论有关。
在我的项目中,我通常在与视图相同的程序集中实现VM。这包括RelayCommand(ICommand实现)和实现INPC的ViewModelBase。
我最近看过Robert Martin的演讲。从我记忆中他说,应用程序的架构应该尖叫应用程序的功能。不应将类分组到称为(MVC或MVVM)的项目或文件夹中。这告诉我们应用程序的功能。类应该按照它们的功能,按照它们实现的功能进行分组。我还没有进入这个阶段。我仍然像你一样分组:)。
我发现你只有一个测试项目。如果在此项目中为计划测试的所有程序集添加目录,这也可能没问题。如果您不这样做,那么找到特定组件的测试会有点困难。您可能希望为计划测试的每个程序集添加测试项目。
答案 1 :(得分:0)
您可以根据需要组织组件,但我喜欢以下结构: - 为项目中的每个屏幕创建2个类库(dll)(其中一个具有视图+此模型的视图模型,另一个dll具有业务逻辑),因此您可以将视图和视图模型与其他业务逻辑和您也可以单独更改,更新每个屏幕业务/视图,并在更换dll时更新。
答案 2 :(得分:0)
这有点矫枉过正,但我想只有你能保证自己的程序。我想我会将合同放在普通和实体(取决于功能)中。另外,我认为你不需要在View和ViewModel之间完全分开。如果他们在同一个项目中,它也可以简化更改/调试过程。
如果您的程序只是客户端,那么您可以在ViewModel中拥有BL(至少如果它不太复杂,可以遵循)。如果您有一个主服务器和多个客户端,那么您不应该在ViewModel中实现 ANY 逻辑(化妆品除外),并且是创建一个新项目