Nhibernate 如何组织ASP.NET MVC解决方案(DDD)

Nhibernate 如何组织ASP.NET MVC解决方案(DDD),nhibernate,model-view-controller,domain-driven-design,projects-and-solutions,Nhibernate,Model View Controller,Domain Driven Design,Projects And Solutions,我正在尝试启动一个新项目(asp.net MVC),我想应用我在过去几个月学到的一些DDD规则。 但我不知道如何组织我的解决方案。 我想使用Nhibernate,但我不想使用流利的Nhibernate,因为这一定是一个实验。 我见过一些例子,人们把所有东西都放在同一个项目中。 另一些人倾向于为每件事创建一个不同的项目。 您认为我应该区分模型和存储库还是将其放在同一个项目中? 如果有人有文章等的链接,我们将不胜感激。 谢谢 Alberto(Automapper的作者)写了一篇关于如何构造代码的优秀

我正在尝试启动一个新项目(asp.net MVC),我想应用我在过去几个月学到的一些DDD规则。
但我不知道如何组织我的解决方案。
我想使用Nhibernate,但我不想使用流利的Nhibernate,因为这一定是一个实验。
我见过一些例子,人们把所有东西都放在同一个项目中。 另一些人倾向于为每件事创建一个不同的项目。 您认为我应该区分模型和存储库还是将其放在同一个项目中?
如果有人有文章等的链接,我们将不胜感激。

谢谢

Alberto(Automapper的作者)写了一篇关于如何构造代码的优秀文章,这可能有助于您的决策


我曾参与过大量独立组件的项目和数量很少的项目。我个人的偏好是拥有更少的组件,因为我总是觉得使用它们更容易。如果您使用良好的编码原则(如SOLID),那么使用2个或20个程序集应该无关紧要。

这取决于您的项目有多大,但我会针对模型和存储库选择不同的项目。在我看来,将模型的内容保存在WebMVC项目的模型文件夹中是不合适的。那里太拥挤了:)

在DDD中,重要的是不要在域逻辑中引入特定于技术的元素(例如,您打算使用的NHibernate或任何其他ORM)。这通常是通过创建所谓的反腐败层来实现的


除了存储库模式,考虑使用使用规范模式来过滤来自存储库的数据。 MVC2的概念是产生关注点分离的区域。我仍然不喜欢它的实施方式。我为几乎每个控制器创建了一个单独的项目。这样我就可以在我工作的新项目中混合和匹配控制器。很好的例子是我有一个名为“安全”的项目,它处理所有登录和用户管理的事情。我的另一个项目叫做Notification,它处理所有的消息和电子邮件。我要做的是将这些整合在一起,为我正在处理的任何项目创建一个核心项目,然后从另一个项目导入dll,我所要做的就是确保我有视图和javascript,它会工作。

我个人认为将每一层划分为一个单独的项目是一个更好的主意。拥有一个包含所有层的大型ASP.NET MVC项目,有些事情是无法实现的

例如,假设您有一个产品产品工厂类。您希望通过ProductFactory强制创建产品对象。要实现这一点,您可以使产品的构造函数内部。这样,ProductFactory类可以实例化产品类,因为产品产品工厂在同一个程序集中。但是,如果您试图实例化另一个项目(即ASP.NET MVC项目)中的产品类,您将收到编译时错误。这样可以实现更好的封装

请注意,如果产品产品工厂和您的控制器在同一个项目中,您仍然可以在控制器中看到产品的构造函数。因此,业余开发人员不了解设计背后的体系结构决策,可以简单地忽略产品工厂,直接创建产品对象


另外,每个层都有一个单独的项目,这使得维护更加容易,因为您必须处理较小的项目,而不是一个大项目

并非所有使用asp.net mvc、ddd和nhibernate的项目都适合某些“默认”体系结构。因此,组织项目的方式取决于项目的功能。对于每个应用程序,我只做一件事:我将表示逻辑(本例中为asp.net mvc)与业务逻辑(本例中为ddd)放在一个单独的项目中。您想创建什么样的web应用程序,以及如何在此应用程序中使用ddd?谢谢Mosh。最佳答案。。。可以理解的东西:-)