这一直是我的烦恼,所以我想我会征求建议。您如何在 WPF(解决方案资源管理器)中组织模型/视图/视图模型?我似乎永远找不到我满意的解决方案,所以我想知道是否有人在那里。
6 回答
除了您的模型应该在他们自己的程序集(项目)中之外。我倾向于将相关视图和 ViewModel 放在一个文件夹中,而不是有一个名为“Views”的文件夹和另一个名为“ViewModels”的文件夹
比如说:
Project MyApp.Model
|---> Models
Project MyApp.Client
|--> Orders
| |--> OrderCRUDView
| |--> OrderCRUDViewModel
| |--> OrderListView
| |--> OrderListViewModel
|--> Accounts
|--> AccountCRUDView
|--> AccountCRUDViewModel
|--> AccountListView
|--> AccountListViewModel
...etc
您如何在 WPF(解决方案资源管理器)中组织模型/视图/视图模型?
我通常将模型放在一个单独的项目中。MVVM 的主要目标之一是使模型与 View 和 ViewModel 完全隔离。
View 和 ViewModel 取决于 - 我的个人组织风格因项目范围而异。
对于非常小的项目,我经常将每个“视图”的 View 和 ViewModel 并排放置。
对于较大的项目,我会将它们分成它们自己的命名空间(和文件夹),甚至分成单独的项目。将 ViewModel 与 View 放在一个单独的项目中很好,因为它可以强制您的 ViewModel 不引用 View 元素,因为您可以将所需的引用完全排除在该项目之外。
在更大的应用程序中,您可能想将东西放入单独的程序集中,但我认为这也可以。
Project MyApp
|--> Views
| |--> AccountsView
| |--> OrderView
|--> Sources
|--> CustomerData
|--> Data
| |--> DataAccess.cs <-- Provides database search helper methods that return ObservableCollections of "Model" data types for use in the ViewModels.
|--> Models
| |--> Account.cs
| |--> Order.cs
|--> ViewModels <-- Having more then one viewmodel for the same data is possible, e.g. Master-Detail scenarios.
|--> AccountsViewModel.cs
|--> OrderViewModel.cs
我将它们分成不同的项目,然后从那里分解。基本上是M项目,VM项目,然后是View作为主项目。尽管最终 V 和 VM 变得更加紧密耦合。
我是一个“解决方案文件夹”的人......
我将给定的 V 和 VM 放在同一个程序集中,并将所有 V/VM 程序集放在 Visual Studio 创建的“解决方案文件夹”中。
模型和实用程序类由程序集隔离,并且也被推入“解决方案文件夹”。
当然,还有一个名为“基础设施”的解决方案文件夹,其中包含魔术字符串等等......
解决方案文件夹是一个合乎逻辑的名称。他们不会在您的驱动器上创建物理文件夹。
近十年来,这一直是我为非平凡项目的基本设置,它的简单性对我很有帮助。将视图和视图模型保留在同一个项目中的糟糕做法似乎是一个棱镜问题,但 MVVM 社区在十年前就击落了这种反模式。
客户层:
ProjectName.Client.csproj
--Assets
--Images
--Brushes
--DataTemplates
--Styles
--Controls
--Helpers
--Views
ProjectName.Client.ViewModel.csproj
--ModelViews
--ViewModels
--Helpers
服务器层:
ProjectName.Server.Services.csproj
ProjectName.Data.csproj
ProjectName.Model.csproj
视图模型层不引用服务器层中存在的“模型”项目,而是通过数据服务引用的代理向视图模型公开。