5

我想开始一个新项目(asp.net MVC),我想申请一些我在过去几个月中学到的DDD规则。
我不知道如何组织我的解决方案。
我想使用Nhibernate,但我不想使用Fluent Nhibernate,因为它必须像实验一样。
我见过一些例子,人们把所有东西放在同一个项目中。 其他一些人倾向于为一切创建一个不同的项目。 您认为我应该区分模型和存储库还是将它放在同一个项目中?
如果有人有一些物品等链接,将不胜感激。
如何组织一个ASP.NET MVC解决方案(DDD)

感谢

阿尔贝托

+0

并非每个使用asp.net mvc,ddd和nhibernate的项目都适用于某些“默认”体系结构。所以组织项目的方式取决于你的项目做什么。对于每个应用程序,我只做一件事:我将表示逻辑(本例中为asp.net mvc)放在与业务逻辑(本例中为ddd?)分开的项目中。你想创建什么样的Web应用程序,以及如何在此应用程序中使用ddd? – Paco

回答

4

我个人认为将每个图层分成单独的项目是一个更好的主意。有一些你不能通过拥有一个包含所有图层的大型ASP.NET MVC项目来实现。

例如,假设您有一个产品产品工厂类。您想强制创建产品要通过产品工厂完成的对象。为了达到这个目的,你可以使的构造函数产品类别内部。通过这种方式,因为产品ProductFactory在同一个装配ProductFactory类实例化一个产品类。但是,如果您尝试从另一个项目(即您的ASP.NET MVC项目)实例化一个Product类,则会收到编译时错误。这样你可以实现更好的封装。

注意,如果产品ProductFactory和你控制器在同一个项目中,仍然可以看到产品的构造在控制器。因此,一位业余开发人员不了解设计背后的架构决策,可以直接忽略对象并直接创建对象。

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

+0

感谢Mosh。最佳答案...可以理解的一些事情:-) – LeftyX

5

Jimmy Bogard(Automapper的作者)写了他是如何构造自己的代码,这可能有助于帮助你决定一个很好的article

我已经在项目中使用了数量很少的单独程序集和项目。我个人的偏好是组装更少,因为我总是发现它更容易处理。如果您使用良好的编码原则(如SOLID),则使用2个或20个组件无关紧要。

2

这取决于你的项目有多大,但我会去为模型和存储库的不同项目。在我看来,将模型的东西放在WEB Mvc项目的模型文件夹中是不合适的。它太拥挤了:)

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

除存储库模式外,请考虑使用规范模式来过滤来自存储库的数据。

0

MVC2具有创造分离关注区域的概念。我仍然不喜欢它是如何实施的。我几乎为每个控制器创建了一个独立的项目。这样我可以在我工作的新项目中混合和匹配控制器。很好的例子是我有一个名为“安全”的项目,它处理所有登录和用户管理的东西。我拥有的另一个项目叫做Notification,它处理所有的消息和电子邮件。我将它们合并在一起是为我正在创建的任何项目创建一个核心项目,然后从另一个项目中导入dll中的所有内容,我必须确保我具有视图和JavaScript,并且它将会工作。