想要构建一个分布式的微服务应用集群
服务假设
Aggregate Root——Activity
存在一些基本属性。id,name,properties……
存在一个List类型的ValueObject participantList。Activity参与人列表。
有业务
// 修改基本信息
modifyBasicInfomation(BasicInfoCommand cmd);
// 更新参与人。包括成员参与,管理员更新。
// 类似银行余额,不允许第二类更新丢失。
updateParticipants(ParticipantsCommand cmd);
并发更新
在repository的实现为了避免更新丢失,有几种方法
Activity全局加乐观锁,以version属性作版本号
示例代码
val activity = repository.findByid("id123456");
activity.doBusinessService("params");
repository.save(activity);
代价是锁粒度大,冲突多。而且完全不相关的业务一样会因为锁而失败。
respository增加单独更新方法,业务穿层。
示例代码
val activity = repository.findByid("id
123456");
activity.doBusinessService("params");
respository.casXX(activity);
respository注入领域对象。
示例代码
val activity = repository.findByid("id
123456"); // inject repository
activity.doBusinessService("params");
分离领域对象?
或许我没完全了解到领域驱动设计。在学习理论觉得该设计非常优秀,然而看完在思考一些案例时候,似乎找不到一个正确的落地模式。