c# - WPF - MVVM 架构(Visual Studio 解决方案和项目)

标签 c# .net wpf mvvm architecture

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

7年前关闭。




Improve this question




我正在开发一个 MVVM 模式的 Window-App WPF 项目。目前,该应用程序有点简单(无法真正解释产品的性质),但最终它有望成长为更复杂的应用程序。

  • wpf winapp 有一个本地数据库,还连接到一个 REST 服务。
  • 开发时间并不是最重要的问题。但可维护性和可测试性。
  • 将使用 IOC 容器和 DI
  • 计划做 1 ViewModel 是为了 1 View
  • 我不想使用任何 WPF/MVVM 框架,因为这是我第一次使用 WPF-MVVM 应用程序(就像第一次在裸 DOM javascript 中编码,即使有 jquery)。

  • 我决定使用多个项目,这就是我到目前为止的想法:
  • Product.Windows.Common (实用程序、日志记录、助手等)
  • 产品.Windows.实体 (数据库和 REST 实体)
  • Product.Windows.Contracts (所有接口(interface)都将驻留在此命名空间/项目中)
  • 产品.Windows.数据 (本地数据库)
  • Product.Windows.ServiceClients (用于 REST 客户端)
  • 产品.Windows.App (主 WPF 项目,包含 Views/XAML)
  • Product.Windows.Models (INPChanged)
  • Product.Windows.ViewModels (INPChanged 和 ICommands)
  • Product.Windows.Tests (单元测试)

  • 我只想问:
  • 这种架构是不是有点矫枉过正?
  • 我需要创建一个产品.Windows.Business 对于业务逻辑?还是应该将业务逻辑放在 ViewModel 中?

  • 先感谢您 :)

    最佳答案

    我目前正在开发具有类似结构的应用程序。项目结构看起来不错。在我的项目中,我做的事情有点不同。

    Data 和 ServiceClients 程序集可能代表您的 DAL。很好,这些在不同的组件中是分开的。在数据程序集中,您将拥有存储库,在 ServiceClients 中,您将拥有服务代理。实体和契约(Contract)程序集可能代表您的 BL。在这里,我认为您可以使用单个程序集。此程序集应由两个 DAL 程序集引用。

    单独实现日志记录很好,如果您有安全性,这也应该在 Common 中实现。根据我最近读到的一本好书,.NET 中的依赖注入(inject),实用程序和帮助程序是设计不佳/不完整的结果。这些类通常包含静态方法。但我认为这与讨论无关。

    在我的项目中,我通常在与 View 相同的程序集中实现 VM。这包括 RelayCommand(ICommand 实现)和实现 INPC 的 ViewModelBase。

    我最近看了罗伯特马丁的演讲。据我所知,他说过应用程序的架构应该尖叫应用程序的功能。类不应分组在称为(MVC 或 MVVM)的项目或文件夹中。这并没有告诉我们该应用程序的功能。类应该按照它们所做的事情、它们实现的特性来分组。我还没到这个阶段。我仍在对像你这样的东西进行分组:)。

    我看到你只有一个测试项目。如果您在此项目中为您计划测试的所有程序集添加目录,这也可能很好。如果您不这样做,则很难找到特定程序集的测试。您可能希望为计划测试的每个程序集添加测试项目。

    关于c# - WPF - MVVM 架构(Visual Studio 解决方案和项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24646706/

    相关文章:

    c# - readerwriterlock 允许在获取写锁时读取?

    c# - EntityFramework 6.0 CreateDatabaseIfNotExists 代码先创建数据库

    .net - 表达式树中的类似运算符

    .net - 使用 “SQL”查询Active Directory?

    wpf - 对齐堆栈面板中的项目?

    c# - 将 2 个连续字节转换为一个 int 值提高 C# 中的速度

    c# - 使用 MVVM 模式正确设置项目

    .net - 为什么 StackoverflowException 会终止整个进程而不仅仅是单个线程?

    c# - 分别绑定(bind) OneWay 和 OneWayToSource 吗?

    c# - FormattedText Width 属性不考虑尾随空格