限界上下文和四色原型,请banq大牛帮助解答一下疑问吧,谢谢

请banq大牛帮助解答一下疑问吧,谢谢
最近结合着《Java Modeling in Color with UML(四色原型)中文版》看《实现领域驱动设计》,感觉四色原型里提供的组件并未按照领域驱动设计的思想去做。我把四色原型中的物料资源管理中有好几个组件,我只画了3个,分别是物料资源组件、发给供应商的PO组件、供应商交付组件,发现这些组件之间的关系挺复杂。



问题1:子域与限界上下文的划分
划分方法1:权且将物料资源管理做为一个子域,那么物料资源组件、发给供应商的PO组件、供应商交付组件算是这个子域中一个限界上下文,为何说“权且”,因为我不确定这样划分是否正确。



划分方法2:我感觉划分方法1不太正确,因为《实现领域驱动设计》中说最好是一个子域对应一个限界上下文。因此,将物料资源组件、发给供应商的PO组件、供应商交付组件分别算一个子域,每个子域中有一个限界上下文



划分方法3:把整个物料资源管理(包括这3个组件)整个做为一个限界上下文

问题2:上下文划分的不同,会影响着之间的交互
无论按照哪一种划分方法,《Java Modeling in Color with UML》书中的关联关系都太复杂,感觉不是以聚合根进行交互的。应该如何交互呢?



[该贴被abel于2015-01-28 14:37修改过]

四色模型有助于上下文的区分。

我将四色模型映射到语言语义:什么人在什么地方做了什么事情。

什么人是主体Subject,是四色中角色Role,你这个案例中:物料管理员在仓库对物料进行管理(增删改查CRUD),这是一个场景上下文。

比较有分歧的是供应商这块,是否可理解为:供应商(Role)接受采购单和完成采购单。这个上下文有一个共同主体subject是供应商,它们围绕的一个实体是采购单,第一阶段是接受采购单,第二阶段是完成采购单,这两个阶段是一个事务过程,也就是有前后因果一致性关系的,将逻辑强一致性封装在一起是上下文划分的主要依据。

以上是我个人分析,仅供参考。

参考:通过实体快照实现事件建模
[该贴被banq于2015-01-29 11:24修改过]

我想结合jdomframework框架理解一下,但是源码下载之后,构建项目出现错误,项目中有gradle,有ant,有maven,使用哪个构建?
我使用maven构建example/match项目无法启动,有没有相关的部署文档呢

非常感谢您的解答,我特别想将JF框架应用到新的项目中,但是缺少这个技术能力,看了好几天的DDD,CQRS,ES,感觉心理有这种概念也能理解。但是实际分析的时候,却又不得要领,不知道如何分析,能否详细指点一下JDON分析法,就是您那张经典的纵横坐标分析方法的图,如何分析?例如从横坐标场景出发,如何得出状态。
第二个问题是
我看了jdonmvc+cqrs+ds的例子,大概的需求是对用户进行增删改查吧,在ResourceManagerContext类中有添加(post方法)、删除(delete方法)、修改(update方法),增删改查方法类似,为什么单单update方法里使用commandHandler类发出命令,而其他几个方法都是直接使用ES来发布事件的?
[该贴被abel于2015-02-06 13:49修改过]


20150206物料管理
1、物料分为多种类型

上面的图是我想举的例子,文字打了半天突然就没了,只剩下图了,又要重新打一遍。
举个例子:生产一个纸质飞机模型,需要胶水和卡纸,胶水可以由不同供应商供应,每个供应商供应的胶水有不同规格,有瓶装的200ml,盒装的100ml,胶棒的1管
从上面简单需求得知,至少要
1、产品管理
2、供应商管理
3、物料管理
我们单取物料管理的CRUD来说,要对物料类型CURD和物料CURD
那么使用JDON分析法,就是您那张经典的横纵坐标分析法
如何从纵坐标得出边界,上下文,聚合根
如何从横坐标得出职责,状态
先谈谈我的认识:
纵坐标分析:
物料类型CRUD和物料CRUD算是一个上下文,还是两个上下文呢?这似乎没有什么严格的规则来划分上下文吧,直觉上应该是一个上下文。
在一个上下文中,有2个聚合根,不知道是不是这样的?即上面的那张图。不知道对不对
横坐标的场景就是增删改查场景,由场景得知聚合根的职责就是增删改查。
那么状态是什么?如何得出的呢?

得出这些之后,又如何将JDON框架应用起来呢?下面是我理解的JDON框架在DDD,CQRS,ES方面的用处是不是?


聚合根之间不可直接引用,这是两种聚合边界,两个聚合之间可以通过服务来集成。

以物料管理来说,从四色角度看,很显然是围绕物料为核心的活动,物料类型是物料的描述des,所以,这是一个上下文,一个聚合体,这个聚合边界内只有一个聚合根实体:物料。

根据Jdon分析法这张图:

纵坐标已经分析出实体:物料,其状态也就是随着活动时间变化的一些属性,也就是对应四色中MI活动改变的状态。

横坐标中场景对应上下文,具体使用一个服务实现,也是测试场景,当然,也可以用commandHandler来实现,两者定位差不多。

你的最后一张图是针对物料类型,而不是物料,那么如果要新增物料类型怎么办?在操作物料时,通过对话式popup菜单操作物料类型,比如首先选择已经存在的物料类型,如果没有,就在弹出的小窗口中新增,这样,将物料类型作为物料的辅助,符合物料的进一步详细描述这个身份。

(回帖文章如果很长,建议使用转发按键,开一个新帖讨论,如碰到刷新,打字内容没有了,ctrl-v能取出内容)。


大家都说 DDD 好. 我就想问为什么 开源的这些工具 都不用DDD , 能介绍一些 经典的案例 和大师的DDD 最佳实践嘛.