Domain driven design 如何组织领域驱动的设计项目?
我已经开始学习DDD,想知道其他人是如何组织他们的项目的 我从组织我的聚合开始: MyApp.Domain(域模型的名称空间)Domain driven design 如何组织领域驱动的设计项目?,domain-driven-design,organization,Domain Driven Design,Organization,我已经开始学习DDD,想知道其他人是如何组织他们的项目的 我从组织我的聚合开始: MyApp.Domain(域模型的名称空间) MyApp.Domain.Product -产品 -IPProductService -IPProductRepository -等 MyApp.Domain.Comment -评论 -ICommentService -ICommentRepository -etc MyApp.Infrastructure -… MyApp.Repositories -ProductR
MyApp.Domain.Product
-产品
-IPProductService
-IPProductRepository
-等
MyApp.Domain.Comment
-评论
-ICommentService
-ICommentRepository
-etc
MyApp.Infrastructure
-…
MyApp.Repositories
-ProductRepository:IPProductRepository
-etc
我遇到的问题是,我必须将我的域产品引用为MyApp.domain.product.product或product.product。我还与产品的linq数据模型发生冲突……我必须使用难看的代码行来区分这两个模型,例如MyApp.Domain.product.product和MyApp.Respoitories.product 我真的很想看看其他人是如何组织他们的DDD解决方案的 我正在使用VisualStudio作为我的IDE
非常感谢。只要有可能,我都会尽量让事情变得简单,所以通常这样的事情对我来说很有用: 域-所有特定于域的类都共享此命名空间 数据-从域中抽象数据库的薄层 应用程序-所有“支持代码”、日志、共享实用程序代码、服务使用者等 Web-Web用户界面 例如,课程将是:
- Myapp.Domain.Sales.Order
- Myapp.Domain.Sales.Customer
- Myapp.Domain.Pricelist
- Myapp.Data.OrderManager
- Myapp.Data.CustomerManager
- Myapp.Application.Utils
- Myapp.Application.CacheTools
等等。您的域可能有 名字,所以你应该用这个 名称作为名称空间 我通常把它放在存储库中 实施和数据访问 名为 域下的持久性 命名空间 应用程序使用自己的名称
作为命名空间。我喜欢将域放在应用程序的根命名空间中,放在它自己的程序集中:
Acme.Core.dll
[根命名空间:Acme
]
这清楚地表明,域在应用程序的所有其他部分的范围内。(更多信息,请参见杰弗里·巴勒莫)
接下来,我有一个将域对象映射到数据库的数据程序集(通常带有)。此层实现存储库和服务接口:
Acme.Data.dll
[根命名空间:Acme.Data
]
然后,我有一个表示程序集,声明我选择的UI模式的元素:
Acme.Presentation.dll
[根命名空间:Acme.Presentation
]
最后是UI项目(假设这里有一个web应用程序)。这是前几层中元素的合成发生的地方:
Acme.Web
[根命名空间:Acme.Web
]我想检查codecamp服务器,因为那里的设置非常常见
他们有一个核心项目,其中包括应用程序层和域层。即洋葱的内部()
实际上,我喜欢将核心分解成单独的项目来控制依赖的方向。因此,我通常:
MyNamespace.SomethingWeb虽然您也是一名.Net开发人员,但Eric Evans和Citerus提供的DDD是一个很好的资源 在doc的代码中,您可以看到DDD组织进入有界上下文并聚合在一起,就在Java包中 另外,你可以考虑Billy McCafferty的。这是一个ASP.NETMVC、NHibernate/Fluent NHibernate实现,它是在考虑DDD的情况下构建的 诚然,您仍然需要应用文件夹/名称