首页 新闻 会员 周边 捐助

大佬们,请教个问题,关于DDD的应用服务和领域服务的,谢了。。

0
悬赏园豆:40 [已解决问题] 解决于 2017-11-25 23:46

大佬们,你们好,小弟最近在学DDD,但是 理解不够,也不是很清楚怎么用,比如 应用服务和领域服务 。说是 一个 应用服务代表一个工作单,我的想法是:比如有个功能,要同时新增两张表A、B,是不是 这个 功能写在 应用服务层,然后A、B单独的新增写在 领域服务层,然后应用服务来调用这两个领域服务。然后 展示层 调用这个 应用服务。是这样么?

求指点。。谢了!!!!

众生少两千的主页 众生少两千 | 初学一级 | 园豆:1
提问于:2017-11-25 10:48
< >
分享
最佳答案
1

不要用关系型数据库的思想继续延续下来考虑a,b表的功能,你应该考虑实际业务,如果还是陷在一个表就应该有一个坑与之对应的话那说明你ddd还没入门。相反你应该先根据业务去规划领域模型及分清它们的边界,这个是ddd的核心,如果能够设计出完全能够无异议的描述业务的模型那就是相当成功了。而具体数据如何落地及查询这是仓储的事情,如何组织跨表的领域对象的存储这是unit of work(如果使用entity framework则DbContext已经包含这个功能了)。因此你的问题中的a,b什么表的从出发点上就是错误的。

收获园豆:30
Daniel Cai | 专家六级 |园豆:10424 | 2017-11-25 12:15

大神,你好,我明白你的意思。但是最终的实现还是得落到表上噻。现在我是想通过代码来实现理解,所以我建了个基本的架构:基础设施层、领域层、应用层、展示层。比如一个简单的 修改角色及其对应的角色权限功能,在实现这个的时候该怎么设计应用服务和领域服务呢?不知道这个例子恰不恰当?领域服务是实现业务逻辑噻,但是一个应用服务又是一个工作单元,是不是就是在领域层放两个仓储(修改角色、修改角色权限),然后在应用层调用这两个,来实现数据的一致。。

众生少两千 | 园豆:1 (初学一级) | 2017-11-25 15:57

@众生少两千: 这里我理解的话你所谓的角色是个聚合,而权限可能是个值对象(就你的描述实在看不出来权限这个本身还有什么可变化的余地,比如添加这个操作的权限。不太明白你修改角色和角色权限有什么区别),如果是这样其实只需要一个仓储就可以了,甚至都不需要用unit of work

关于unit of work 你看下ms的这篇文章

https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

 

关于应用服务,它其实是很薄的一层,有时候只是完成最基础的验证逻辑,有时候可能需要组合多个领域服务完成跨领域对象的一些操作。而领域服务则承载着域内所有的业务逻辑。

Daniel Cai | 园豆:10424 (专家六级) | 2017-11-25 17:30
其他回答(2)
1

应用服务是对表示层提供的接口,负责数据验证、日志、授权,,,,

领域服务是应用程序的核心,负责业务逻辑

西漠以西 | 园豆:1675 (小虾三级) | 2017-11-25 11:34
1

DDD的重点还是思路,就算用3层一样是可以实现ddd的.

至于那些什么仓储啊.异步事件处理啊.反而是无关紧要的.

新手不要上来就学这种庞杂的东西.DDD就不是给新手用的.

新手学DDD只要学到:将业务划分为业务模块.业务模块包含方法与属性  就勾了

收获园豆:10
吴瑞祥 | 园豆:29449 (高人七级) | 2017-11-25 16:02

大神,你好,业务就是代表一个领域噻?

支持(0) 反对(0) 众生少两千 | 园豆:1 (初学一级) | 2017-11-25 16:20

@众生少两千: 不要把DDD神话了.其实他的核心就是我们平时做的模块划分.

一个业务模块就是所有的一个领域.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-11-25 16:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册