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

时间:2010-02-17 22:35:21

标签: nhibernate model-view-controller domain-driven-design projects-and-solutions

我正在尝试启动一个新项目(asp.net MVC),我想应用我在过去几个月中学到的一些DDD规则。
我不知道如何组织我的解决方案 我想使用Nhibernate,但我不想使用Fluent Nhibernate,因为它必须像实验一样。
我已经看到一些例子,人们将所有内容保存在同一个项目中。 其他一些人倾向于为一切创建一个不同的项目。 您认为我应该区分模型和存储库还是将它放在同一个项目中? 如果有人有一些文章的链接等,将不胜感激。

感谢

阿尔贝托

4 个答案:

答案 0 :(得分:5)

Jimmy Bogard(Automapper的作者)撰写了一篇关于他如何构建代码的优秀article,这有助于帮助您做出决定。

我参与了大量独立装配和项目数量较少的项目。我个人的偏好是减少装配,因为我总是觉得它更容易使用。如果您使用良好的编码原则(如SOLID),那么使用2或20个程序集无关紧要。

答案 1 :(得分:4)

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

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

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

另外,为每个图层设置一个单独的项目可以使您的维护更容易,因为您必须处理较小的项目,而不是一个大项目。

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

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