【问题标题】:Splitting app's parts in their own assemblies when using Prism使用 Prism 时将应用程序的部件拆分到自己的程序集中
【发布时间】:2011-07-07 04:56:23
【问题描述】:
MVVM 方法鼓励(或只是提供可能性)将 WPF 或 Silverlight 应用程序拆分为 Model、ViewModel 和 查看项目,以便所有三个项目都可以存在于它们自己的程序集中。
另一方面,使用 Prism(在我的例子中,MEF 作为依赖注入容器),可以构建一个模块化应用程序,该应用程序分为一组功能单元(命名模块) 并且在这种情况下,每个单元都是一个单独的程序集。
我说得对吗,在这种情况下,我们只能在自己的程序集中分离一个 Model,但是 View 和 ViewModel 应该放在一个组件中,代表一个功能模块?
【问题讨论】:
标签:
wpf
silverlight
mvvm
assemblies
prism
【解决方案1】:
首先,模块不是相等的组装。您可以在几个程序集(包括模型、视图和视图模型)之间分布模块的部件。虽然,通常您将与模块相关的类放在一个 DLL 或 XAP 文件中(如果您的模块是单独的 Silverlight 应用程序,则在 Silverlight 的情况下)。
就您的情况而言,如果模型是可由多个模块使用的共享实体,Prism 鼓励将其放置在保持共享的非模块特定逻辑的所谓基础设施程序集中。否则,将 MVVM 部件放在一起可能是个好主意,因为它们解决了常见的业务任务。以后如果需要更换 MVVM 的某个部分的实现,只需添加一个新的部分并调整容器的映射即可。
【解决方案2】:
是的,Prism 鼓励您将所有内容(模型、视图和视图模型)放入一个独立的功能模块中。
无论如何,我强烈不建议您将视图和视图模型拆分为单独的项目。这是因为它们紧密耦合在一起并且是并行开发的。
关于如何组织 MVVM 应用程序,有两种推荐的方法。首先是当您按层组织项目并将视图和视图模型放入项目内的单独文件夹中时。其次,当您按功能创建文件夹并且不分离视图和视图模型时,即它们并排位于同一个文件夹中。我个人选择第二种,因为正如我所提到的,它们总是一起开发和维护的,这样很容易找到相应的视图或视图模型。