【问题标题】:MVVM separate assemblies Visual Studio: What should I choose as the project types?MVVM 独立程序集 Visual Studio:我应该选择什么作为项目类型?
【发布时间】:2015-10-12 03:08:25
【问题描述】:

我看到的许多教程都有 view/viewmodel/model 文件夹。

如果我要使用 Visual Studio 项目将这些中的每一个分成单独的程序集,我会为每个部分选择哪些项目类型?

我计划使用来自 NuGet 和 XAML 的 Prism 6。

这是我最初的感受:

  • 应用程序:WPF 应用程序
  • 视图:WPF 用户控件库
  • ViewModel:类库
  • 型号:类库

或者,视图是否应该存在于更高级别的 WPF 应用程序中?

【问题讨论】:

  • 何必呢?除非您希望在多个可执行文件中引用这些元素,否则这是没有意义的。
  • 希望对每一层进行良好的测试。
  • 是的,这不是正当理由。
  • 模型层以后肯定会在其他平台上复用。一旦我们把它分开,对模型和视图模型遵循相同的模式似乎是合乎逻辑的。
  • 好吧,模型说得通。然而,逻辑并非如此。您可能永远不需要重用视图或虚拟机,因此将它们分开是浪费时间。

标签: c# wpf mvvm visual-studio-2015 prism


【解决方案1】:

作为承包商和全职人员,我与许多不同的 MVVM 项目进行了广泛的合作,我认为这取决于您的开发周期的性质。如果您有一个严格遵守 TDD(例如)的程序员团队以及一个使用 Blend 的独立设计师团队,那么您提供的示例是合理的。然而,在我见过的大多数项目中,程序员几乎负责所有事情,包括手动编写 XAML,在这些情况下,按应用程序系统而不是按层对解决方案和文件夹进行分组要容易得多。您的大部分时间可能会花在编写视图和视图模型代码上,当您编辑其中一个时,您几乎总是会更改另一个,因此您可以省去很多麻烦,尤其是在您的应用程序中成长。

这些东西没有万能的,但我倾向于做一些大致类似的事情:

  • MyApp(包含应用程序类和其他部分)。
  • MyApp.Controls(包含非特定于应用程序的自定义控件,通常在 WPF 应用程序中不需要)。
  • MyApp.Domain(DDD、ORM、业务逻辑等实体。很多人认为这应该进一步拆分为数据层。)
  • MyApp.Localization(由于命名空间的技术原因,必须在其自己的程序集中)
  • MyApp.Net(负责在全栈开发期间与其他应用程序通信,例如服务器、客户端、管理 websocket 等)。
  • MyApp.Settings(我通常需要添加大量的用户自定义)
  • MyApp.UnitTests(不言自明,对 TDD 尤其重要)。
  • MyApp.WinUI(视图和视图模型)。

除此之外,还有用于 3rd 方库(MVVM 对话框、主题等)的各种其他项目以及用于数据库维护的各种控制台和/或 Windows 实用程序。

这都是专门针对 Windows 应用程序的,非 Windows 解决方案也倾向于添加到系统的独立 MVC 和 WCF 组件中,但这是另一篇文章! :)

【讨论】:

    【解决方案2】:

    您最初的隔离似乎很好。您的应用程序外壳和引导程序需要位于应用程序类型项目中。其余的一切都可以在类库中。如果您将 Views 保留在单独的库项目中,则优点是您可以替换它(更好的 UI),而无需修改其他项目。

    您是否真的需要将这些类拆分为单独的项目取决于您的项目复杂性。大多数时候,一个命名空间就足够了。如果您要进行模块化设计,每个模块都可能包含自己的视图/视图模型/模型,这有助于提高抽象水平。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多