在WPF中使用MVVM时,您最终会得到什么样的项目结构?
从我现在看到的教程中,他们通常有文件夹:Model,ModelView和 视图。
在模型中,您可以放置像Person这样的类来捕获数据 和逻辑。
在ModelView中,您实例化Model中定义的类。视图包含 .xaml文件。
编辑:我编辑原始帖子以发送示例项目结构。 我有与此有关的问题。我如何组织这些: App.config中 App.xaml中 MainWindow.xaml
我应该像现在一样将它们留在外面,还是应该把它们放在某个文件夹中?
答案 0 :(得分:58)
您已经描述了常用或常用的文件夹布局。根据经验,我更喜欢为模型数据类型添加单独的文件夹(或大型应用程序中的项目),例如您提到的典型Person
类。我这样做的原因是因为这经常成为最大的项目之一。我还将它分成以下子文件夹:
DataTypes
Collections
Enums
Interfaces
我还有应用程序Converter
类,扩展方法类,实用程序(或服务)类的单独文件夹(或大型应用程序中的项目)。最后,我有与应用程序文件夹结构非常匹配的测试项目。总的来说,这大致是我的文件夹的样子:
Solution
Third Party Libraries <<< (Solution Folder)
StartUp Project
Images
Resources
Converters
DataTypes
Collections
Enums
Interfaces <<< (For Data Type classes)
Extensions
Models
Data Controllers
Data Providers
Interfaces <<< (For swapping Model classes out in test projects)
Utilities (Or Services)
Interfaces <<< (For swapping Utilities classes out in test projects)
View Models
Commands
Views
Attached Properties
Controls
更新&gt;&gt;&gt;
项目(如文件夹)只提供分离级别。它们还帮助我绘制我的应用程序命名空间。例如,Collections
文件夹/项目中的代码类将位于ApplicationName.DataTypes.Collections
命名空间中。 Data Providers
文件夹/项目中的类将具有ApplicationName.Models.DataProviders
命名空间。
此外,在大型应用程序中,我的项目名称来自它们在此层次结构中的位置...例如,我的DataTypes
项目实际上被称为ApplicationName.DataTypes
并且我的Models
项目被调用ApplicationName.Models
。 Collections
和DataProviders
部分是文件夹,以及超过第二级的所有项目,例如。 Enums
,Images
,Commands
等
答案 1 :(得分:20)
大多数人使用您提到的“标准”结构:
我认为它受欢迎的原因是因为有些人会认为你应该能够将Models,ViewModel和Views放在不同的程序集中。
使用此结构,您可以轻松地为其他WPF内容添加文件夹:Converters/
,Resources/
等。
在我的团队中,我们使用此结构,但我们将名称复数化(因此模型/ ViewModels / Views)。
但是,大多数情况下,模型类是在其他程序集/命名空间中定义的;在这种情况下,我们甚至没有Models/
文件夹。
对于大型项目,我们会在Models/
,ViewModels/
和Views/
为了完整起见,值得一提的是,您可能会发现一些人使用“特征驱动”结构:
但这种情况非常罕见。
答案 2 :(得分:2)
我通常会这样:
所有依赖项都基于仅通过DI解析的接口。
答案 3 :(得分:2)