首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DDD基础设施服务

DDD基础设施服务
EN

Stack Overflow用户
提问于 2009-09-05 18:42:40
回答 4查看 23.8K关注 0票数 30

我正在学习DDD,我对基础架构层有点迷茫。

据我所知,“所有好的DDD应用程序”应该有4层:表示层、应用层、域层和基础结构层。应该使用存储库来访问数据库。存储库接口应该在域层和存储库实现中-在基础架构中(参考DDD: Where to keep domain Interfaces, the Infrastructure?)。

应用程序、域和基础架构层应该/可能具有服务(参考Services in Domain-Driven Design),例如,发送电子邮件消息的基础架构层中的EmailService。

但是,在基础架构层中,我们有用于访问数据库的存储库实现。那么,在这种情况下,存储库是数据库服务吗?基础设施服务和存储库之间的区别是什么?

提前感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-06 15:22:16

坚持DDD定义,存储库不同于服务。存储库直接关联到一个实体,通常是一个聚合根。服务定义的行为并不真正属于您的域中的单个实体。您绝对可以在每一层中找到服务,尽管它们解决的问题类型因层而异,并且可能与DDD的概念性服务不同。

在概念级别上工作时,DDD存储库与DDD服务的不同之处在于它专门绑定到实体持久性。服务可以解决您可能遇到的任何域、应用程序或基础架构问题。

你会遇到与DDD到处都是的术语冲突。例如,DDD Repository与Martin Fowler的PoEAA一书中的Repository pattern不是一回事,尽管它可能采用这样的模式。这通常是许多人感到困惑的一个原因。

如果你总是把领域模型放在你所做的每件事的中心,这对DDD很有帮助。当涉及到对DDD应用进行分层时,我经常选择Jeffrey Palermo's Onion Architecture。看看这个。下载CodeCampServer,一个使用此架构的示例应用程序。我认为它非常适合DDD编程。

祝好运!

票数 29
EN

Stack Overflow用户

发布于 2010-05-12 23:24:54

也许这将有助于看到一个潜在的项目结构。

可能的程序集或包结构:

Project.Domain

Project.Infrastructure.Data

Project.Infrastructure.Components

Project.Infrastructure.Services

可能的命名空间或文件夹结构:

Project.Domain

-n-模块

-n- Account

-f- Account.xx

-f- AccountRepository.xx

-f- Contact.xx

-n-营销

-f- RegionRepository.xx

-n-共享

-n-服务

Project.Infrastructure.Data (OR映射器)

-n-表

-n-视图

-n-步骤

-n-函数

Project.Infrastructure.Components (通用)

-n- Mail

-n-加密

-n- UI

Project.Infrastructure.Services (特种作战)

-f- DoingSomethingService1.xx

-f- DoingSomethingService2.xx

-f- DoingSomethingService3.xx

域实体和值类型不使用域服务。应用层使用域的服务。域存储库对象使用Infrastructure.Data对象返回域对象。

票数 9
EN

Stack Overflow用户

发布于 2009-09-05 19:20:35

关于DDD的一个不幸的事情是“服务”这个词。它应该是“域服务”。将域视为实体和值对象,而服务是一种处理操作、操作和活动的方法。

至于存储库,它们只是一个外观,应该表现为您的域的集合。如果您正在使用ORM或编写自己的ORM,这是所有域对象都应该经历的,以便实现持久性,而不是直接使用这些服务。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1383999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档