MVC +域驱动设计中的文件夹结构

时间:2013-11-15 05:07:29

标签: c# asp.net-mvc entity-framework domain-driven-design asp.net-mvc-5

我正在开始MVC5 + DDD + EF6项目并制作骨架解决方案。我有两个关于最佳实践/惯例的问题:

1)MVC项目中的Models文件夹似乎是多余的,因为模型实际上在域中。如果任何视图需要专用的ViewModel,那么我理解ViewModels文件夹是合适的。

每个MVC区域中的ViewModels文件夹是否合适,并且MVC项目中的Models文件夹是否可能用于任何目的?

2)在我之前的项目中,我们将域模型称为“模型”,但据我所知,由于实体框架中的术语,有些人将其称为“实体”。

我在新项目中的意图是在某些域模型中创建一些丰富的行为,它们不仅仅是愚蠢的DTO(数据传输对象)。

在域层中,是将其称为模型还是实体的约定/最佳实践?

2 个答案:

答案 0 :(得分:4)

我的意见是:


1)如果始终为视图创建视图模型,即使它当前感觉像是1对1映射。 (你可以使用像AutoMapper这样的东西来帮助重复编码任务。原因是你的域和视图现在看起来非常相似,但是从现在起6个月后你的域中发生了很多变化,因为你建立了所需的知识,并且您的视图不再将1对1映射到您的域模型。在每个区域中保留一个ViewModels文件夹,当您需要可重用的ViewModel时,重构并将其移动到公共区域。


2)域项可以是实体/模型,它随处可见几乎不同。只要团队就实体是代码项或实体的时间达成一致就是现实生活中的事情,你试图代表......这一切都很好。随着您无处不在的语言的发展,事情变得更加容易。绝对同意使域尽可能丰富,因为它有助于在系统变大时处理复杂性。 将 Eric Evans - Domain Driven Design 书保留在您的桌面上,并在新项目中保持最佳状态。

答案 1 :(得分:1)

如果您愿意,可以将Models文件夹重命名为ViewModels。什么都不会破坏。

但我更喜欢保持原样,然后只调用ViewModels客户端对象(Knockout或类似的东西)。

我更喜欢在域中填充实体flolder。