浏览 5732 次
锁定老帖子 主题:DomainModel之演化(已更新)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-08-22
在构建企业信息系统时,我们希望构建出的系统,在高效正确运行的同时,构架容易理解,易于扩展。我认为要做到这点,必须要满足后面的条件--系统构架须同领域存在一致的演化映射。领域基本概念就是系统的基本对象,在领域基本概念上,演化的扩展概念,系统必须要以扩展方式,实现它们,扩展对象需关联其基础对象,而不能相反。如果不满足这个条件,则系统构架和领域间将存在不匹配情况,并且其上发展的概念的映射也将受到影响。 所以我们首先要考查领域概念的演化关系。一旦我们确定了这种演化关系,那么DomainModel很大程度就是简单的一一映射问题。不过由于领域的概念,多半都是同时,而并不是按照演化的方式呈现在我们面前。我们有必要整理一番。“如果不研究中国的历史,就没法理解中国的现状”,同样,“如果不研究领域概念的演化,也就没法理解领域模型的结构”。 “世界就是相互作用的总和”,对于企业活动也可以这么看。企业活动,必然存在参与者,包括,资源提供方--目标组织及其价值供应链和资源消费方--客户。也必然存在他们之间交换的资源,可以是物,商品、器材、书、证券等;也可以是某种服务,保险、租赁、上网、访问权限等。所以,基本的业务概念,就是“参与者”、“资源”和“业务交互”,而“业务交互”依赖于“参与者”和“资源”。简单来说,企业信息系统就是要解决“参与者间,围绕资源进行业务交互”的自动化问题。 考查一个券商证券交易系统的示意版本,最基本的参与者是:客户、员工、证券公司、交易所。最基本的资源是证券交易服务。为了完成证券交易服务,还需要属于客户的保证金帐户和证券帐户。证券帐户要知道自己使用哪个保证金帐户来清算,另外证券帐户将依赖于交易所子域中交易市场。交易市场必须要知道自己属于哪一交易所。 证券交易委托-->保证金帐户,证券交易委托-->证券帐户,证券帐户-->保证金帐户 保证金帐户-->客户,证券帐户-->客户 证券帐户-->交易市场,证券帐户明细-->证券,证券-->交易市场,交易市场-->交易所 这里引入一个重要问题,对于对象间的关联,我们到底如何确定它们的依赖和导航关系?似乎证券帐户-->证券交易委托,客户-->保证金帐户,客户-->证券帐户,交易市场-->证券,交易所-->交易市场,也是合理的依赖和导航关系。为什么我们不建立呢?我的回答是“这种方向的依赖关系,背离了领域概念的演化规律”。让基本概念依赖于扩展概念,将导致基本概念不稳定。要使我们的领域概念稳定,必须要做到基本概念不随着业务的发展而改变。也就自觉的遵守了“开闭原则”。 业务概念的依赖分两种。一种是--“静态依赖(持久依赖)”,另一种是--“动态依赖(短暂依赖)” “静态依赖”-- 要划分静态关联的基本概念和扩展概念,有一个简单有效的方法,那就是比较它们的生命周期,生命周期长者为基本概念。理由很简单,因为两关联概念生命周期不同,必存在生命周期长者在某个时间段,没有生命周期短者同它关联而独自存在。 扩展概念: |---------------| 基本概念: |--------------------------------| “动态依赖”--对应UseCase中的扩展关系。例如:电信应用中价格策略同产品订单的关系,价格策略根据客户购买产品的订单,来施加业务规则,虽然,价格策略的生命周期要比单个订单长,但扩展概念却是价格策略,订单到成了基本概念。“动态依赖”的识别规律,在UseCase建模中,已经给出--“扩展是基本的可选部分”。 不管是“静态依赖”扩展,还是“动态依赖”扩展,都满足“基本概念可以独立于扩展概念存在,反之则不然”的特征。 虽然,上述的结论来源于我所经历的几个特定领域,但我相信它同样适合于其他的企业信息系统。当然,这需要得到印证。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-08-22
ok, 我想我基本上了解你的意思!
我想说的是(看上去有点文不对题): 既然说到演化,那么有一个不能忽略的过程是:隐式概念到显示概念的过程!DDD的第九章Making Implicit Concepts Explicit就是讲这个,我相信很多人有同样的经历。 我以为说演化而不提这个过程是不完整的。 期待你的《鸟瞰》一文! |
|
返回顶楼 | |
发表时间:2006-08-22
yimlin 写道 ok, 我想我基本上了解你的意思!
我想说的是(看上去有点文不对题): 既然说到演化,那么有一个不能忽略的过程是:隐式概念到显示概念的过程!DDD的第九章Making Implicit Concepts Explicit就是讲这个,我相信很多人有同样的经历。 我以为说演化而不提这个过程是不完整的。 期待你的《鸟瞰》一文! 是的,要得到深刻反映领域的模型,随着理解的深入,开发过程中的演化,必不可少。 |
|
返回顶楼 | |
发表时间:2006-08-23
不错的文章。
也就是说,领域概念的演化过程映射到模型中的依赖关系,反之,考察模型中的依赖关系即可得出领域概念的演化过程 不过将业务概念的依赖分一种是--“静态依赖(持久依赖)”,另一种是--“动态依赖(短暂依赖)” 觉得没有这个必要。 |
|
返回顶楼 | |
发表时间:2006-08-23
hostler 写道 不过将业务概念的依赖分一种是--“静态依赖(持久依赖)”,另一种是--“动态依赖(短暂依赖)” 觉得没有这个必要。 还是很有必要的! 在这两个关系在后续建模时很重要! |
|
返回顶楼 | |
发表时间:2006-08-23
用“扩展概念"和"基本概念 "来辨识一个系统中的各个小系统的中心点,到是不错的方法。
同时在构建新的系统时,以这个方法来做系统架构的搭建,似乎也不容易搞乱. 新系统搭建时,最怕的就是中心内容不确定和顺带的周边变换了 |
|
返回顶楼 | |