首页 新闻 赞助 找找看

DDD 领域聚合互相引用的问题

0
悬赏园豆:10 [已解决问题] 解决于 2021-09-10 12:44

有领域聚合根对象 Member (会员) ,

class Member
{
memberId;//会员ID
name; //姓名
levelId; //会员等级ID
balance; //余额
...
}

会员级别对象

class LevelInfo
{
levelId;
discount; // 折扣
}

有领域聚合根对象 Order (订单),
class Order
{
orderId; //订单ID
memberId; //会员ID
pay(); //支付订单
....
}

调用order.pay(...) 支付订单,

那么问题来了, Pay方法中怎么去拿Member呢, 还要拿到会员的等级信息(LevelInfo)来判断打几折, 如果在该方法中直接操作Member对象, 是不是侵犯领域对象边界了, 不知道怎么设计, 请大神指点

虾舞天涯的主页 虾舞天涯 | 初学一级 | 园豆:194
提问于:2021-09-04 18:47
< >
分享
最佳答案
0

涉及到两个领域聚合交互的业务,应该有个领域服务层
在这一层处理

收获园豆:8
不知道风往哪儿吹 | 老鸟四级 |园豆:2035 | 2021-09-06 11:13
其他回答(1)
0

涉及到 设计模式 的使用了。

看看 策略模式 VS 状态模式,,这两种或可以满足你的需求:
https://www.runoob.com/w3cnote/state-vs-strategy.html
Order 里面的 pay() 肯定是 调用 Member 里面的 余额变化 接口的,
是不是还得考虑分布式事务?
请继续。

收获园豆:2
快乐的凡人721 | 园豆:3915 (老鸟四级) | 2021-09-04 20:56

你好, 在一个程序里面实现, 不考虑分布式, DDD设计模式里面不是不可以一个领域对象持有另一个领域对象的引用么,

支持(0) 反对(0) 虾舞天涯 | 园豆:194 (初学一级) | 2021-09-04 22:04

@虾舞天涯:
我是新手。
Member这个服务 没有提供接口吗?Order里面有memberId,调用其Member服务的接口可以实现吧?

支持(0) 反对(0) 快乐的凡人721 | 园豆:3915 (老鸟四级) | 2021-09-04 22:26

@快乐的凡人721: 只是为了实现当然是可以的, 你了解DDD吗

支持(0) 反对(0) 虾舞天涯 | 园豆:194 (初学一级) | 2021-09-04 22:31

@虾舞天涯:
做过相关项目,看过一个 阿里巴巴的开源项目(名字有些不记得了)
还需深入研究才是。

要完全解耦的话,发消息?

支持(0) 反对(0) 快乐的凡人721 | 园豆:3915 (老鸟四级) | 2021-09-04 23:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册