`
yimlin
  • 浏览: 139474 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Domain Object:基于业务行为的分析

阅读更多
Domain Object :基于业务行为的分析
——Domain Object 的动静之分,及其与 Business Process 的关系

Author:Anders小明
    
一、Domain Object的动静之分
1.1 动静的标准是什么?
在系统运行期间,被频繁建立和更新的称为“ 动态” ,而在较长的一段时间内保持稳定的称为 “ 静态” 。
 
1.2 考查Domain Object的动静将意义何在? 
     通常而言,“ 动态” 的Domain Object群通常代表了系统的核心业务对象。而 “ 静态” 的Domain Object则在业务上代表了系统的依存关系。 
    更进一步我们可以在“ 动态” Domain Object群中找到一个或几个代表了系统核心业务系统的核心。然而核心业务对象和综合业务对象还是有区别的,“ 动态” 的Domain Object中,最动态的不一定是综合业务的核心,在下面我们将举例说明。
    例如保险业务中,涉及的对象如下:
    Party(Customer以及各种Channel Role),Account,Product(险种),Policy(保单)等等,
    其中Policy对象是最频繁被操作的,而Party,Product两个则相对静态。
    在实际业务最常发生的操作也是关于保单的:新契约,保全,理赔,续保等等,很明显,Policy对象就是核心业务对象;Account变化将随保单业务发生;而Party和Product则给出了Policy对象的依存关系。
    然后保险业务的综合业务核心是Party更确切说是Customer。实际上几乎所有的金融服务的核心应该是CRM系统,保险公司(金融机构)是为客户提供全面的金融服务,帮助客户的管理金融资产也就是Holding,在其中最重要的是Account,至于Policy只是客户的一个资产(asset)而已;Party下的各种机构和Channel Role都为了支持公司提供金融服务的。
 
    SpringSide的Demo 例子BookStore 涉及的对象:
    Party(Customer, Provider 以及Deliverer), Book, Order 等.
    Order 是最强烈的动态特征的对象,它代表了BookStore 的核心业务。与保险系统做个类比就是:Order和Policy的概念一样,Book相当于Product,而Deliverer则是Channel Role。
    同样:BookStore的综合业务也是CRM,系统跟踪分析客户的阅读习惯和阅读兴趣以及支持习惯,为客户提供阅读服务。一如Amazon那样。
 
    又如DDD一书的提供的航运例子:Itinerary 是Shipping Model的核心业务对象。
   
二、 Domain Object与Business Process
弄清了Domain Object 的动静之分 ,就需要考虑Domain Object 与Business Process 关联关系。
从实际系统的观察来的看,几乎所有的系统的Business Proces( 核心业务流程和综合业务流程 )都是和“ 动态” 的核心业务对象的 LifeCycle 的Status 关联的。
 
2.1 先来观察一下核心业务流程: 
注意到核心流程的两个现象:
A. 几乎所有的业务操作都始于核心业务对象的建立,而止于该核心对象的死亡(停止),如保险的核心业务是是围绕policy的生命周期来做,新契约,保全,理赔,续保都是建立在policy上;BookStore则是在Order上;同时注意到不同的业务操作会影响了核心对象的LifeCycle的Status。
B. 由Customer的请求(客户向保险公司投保,或者要求加保,网上客户下购书订单,或网上支付)触发Business Process;Business Process又根据核心对象的LifeCycle Status和Request Context触发一系列的Business Action。
 
现在我们以保险业务为例来进行一个完整描述,观察一下涉及的几个概念:
Party(Customer, Channel Role ),Request,Business Action,Business Process 以及最后的 Policy 。
我们来看一下这里面的关系:
1. 首先一个由Customer发起一个投保请求(Request),其中这个投保请求由一个保险客户代表也就是agent(Channel Role)促成(即Request对象引用一个Agent Channel对象)
这个request将激活一个Business Process: 先完成一个投保单的基本信息录入操作,这个Action直接导致了一个Policy对象的建立,此时这个Policy对象的LifeCycle的status是Proposal;
3.接着工作流系统根据该保单的LifeCycle进入核保(underwriting)操作,而该操作促使Policy导向两个LifeCycle Status:Accept和Deny。
4.1 对于Accept的Policy,系统将触发一个通知,通知客户缴纳首期保费。
4.2 在客户缴费后,在系统内部产生一个系统的Request,该Request携带缴费信息,进入承保操作
4.3 承保操作查看缴费额度是否可以承保,如果可以则保单的LifeCycle状态变为inforce。
5.1 对于Deny的Policy,系统触发一个人工操作流程,由工作人员同客户联系调整投保信息如减少保额等
5.2 customer反馈一个request,如同意减少保额,系统进入一个修改Policy的操作,同时Policy的LifeCycle进入Proposal状态
5.3 系统进入3的流程
 
这里是一个简化的描述(另外系统不一定用WorkFlow),在实际业务操作中,还需要操作的对象包括了Party中的其它Role如Insurancer,Payee等等,每个Policy还需要指明具体的Product,以及Payment Agreement等等,当最核心的无疑是Policy对象,而Policy对象的LifeCycle Status又和Business Process有直接的联系。
 
对于BookStore也是如此,在客户下单后
1.Order的LifeCycle状态就是proposal,系统在此期间等待客户的两个请求:付款或者修改订单。
2.而在付款后,Order的LifeCycle状态就是Inforce,系统就通知工作人员开始配书。
3.配书结束后,Order的LifeCycle状态就是assembled
4.系统就要通知相关人员可以通过Deliverer发送订单。在此期间Order的LifeCycle状态为Deliver
5.系统收到Deliverer的货到通知,将Order的LifeCycle状态置为Complete。
 
这里要额外补充说明的是;
对于Request,每个Request必需记录下date,而Channel不一定。
对于Action,每个Action还可能保留一定的人工干预控制信息,也将同LifeCycle的Entry Data一起记录。
对于LifeCycle,每个LifeCycle Status的变化都可能会有独自的Entry Data(与Request Context有关,与Domain相关的)需要记录。
 
2.2 以上是对核心业务系统的讨论,现在要看的是所谓综合业务系统
对于综合业务系统,关注的是Party, Product两个对象系统。
很显然,客户的金融资产(保险系统)或者阅读习惯(BookStore)是系统关心的;product则是系统能为客户提供的服务或者产品;而Provider以及Channel Role包括Deliverer在内都是为服务提供支撑。
 
对于这些对象也就有自己的LifeCycle。虽然其LifeCycle的周期可能要长于Policy或者Order,但是其LifeCycle的状态却可能简单于Policy或者Order
 
Party和Product两个对象系统也有自己的Process,其Business Process的发起也是由request,由于相对于Policy和Order,两个系统相对 “ 静态 ” ,并由于其LifeCycle的简单性,加上这两类对象在实际业务中相比更带有正式授权特征。因此我用一个不同于request的概念Registration来代替。
 
其Process的过程和核心业务过程相差无几,不在复述。
目前对于综合业务系统还没有更多的想法就这样吧。
 
三、不算小结的小结
    无论系统建模还是系统重构,努力去观察了解Domain Object的动静之分,以及Domain Object与Business Process的关系,都有助细粒度的分析系统的业务行为,做出合理的设计方案。
    (听上去更像是口号宣传)
分享到:
评论

相关推荐

    Domain driven design-quickly

    - **领域(Domain)**:是业务操作的集合,即在特定业务环境中工作的人和系统所涉及的活动的集合。领域是DDD中的核心概念,是软件要解决的问题的范围。 - **子域(Subdomain)**:整个领域可以被分解成若干子域,...

    基于DDD的Java开发模板.zip

    在DDD中,核心概念包括领域模型(Domain Model)、聚合(Aggregate)、实体(Entity)、值对象(Value Object)、领域事件(Domain Event)和服务(Service)。这些概念帮助我们更好地理解和组织业务逻辑。 1. 领域...

    UML面向对象建模与设计(Object-Oriented Modeling and Design with UML)习题解

    - **领域分析(Domain Analysis)**:在此阶段,通过对业务领域的深入研究,识别出关键的领域对象及其属性、行为。 - **应用分析(Application Analysis)**:基于领域分析的结果,进一步细化应用程序的需求,明确功能...

    Domain-Driven Design领域驱动设计

    首先是领域(Domain)的概念,它是业务操作的核心部分。在DDD中,领域被进一步划分为子领域,包括核心领域(Core Domain)、支撑领域(Supporting Subdomain)和通用领域(Generic Subdomain)。理解不同子领域对于...

    《领域驱动设计C# 2008实现问题.设计.解决方案》.((美)Tim McCarthy) [PDF].rar.rar

    5. 领域事件(Domain Event):当领域中发生重要业务行为时,会触发领域事件。这些事件可以被监听并处理,以实现异步的业务逻辑或与其他系统通信。 6. 反应式设计:书中可能讨论如何在C# 2008环境中利用反应式编程...

    领域驱动设计.pdf

    8. **比较度量结果**:分析度量数据的变化趋势,识别潜在的问题。 9. **生成文档**:导出项目的文档,方便团队之间的沟通和协作。 10. **导入和导出**:支持导入和导出项目文件,便于版本控制和备份。 通过以上步骤...

    面向对象分析设计 OOAD

    - **对象分析(Object Analysis)**:这个阶段会进一步深入到领域模型的构建,识别关键的业务实体和它们的行为。 - **对象设计(Object Design)**:在设计阶段,我们将领域模型转化为具体的类和接口,同时考虑如何...

    面向对象的分析和设计

    4. 领域模型:介绍如何基于业务领域构建模型,以提高软件的业务契合度。 5. 质量属性:探讨如何设计出可扩展、可维护、可测试的系统。 6. 实现与测试:介绍如何将设计转化为代码,以及如何进行单元测试和集成测试。 ...

    Wrox.dot.NET.Domain.Driven.Design.with.C.Sharp.Apr.2008.pdf

    ### Wrox.dot.NET.Domain.Driven.Design.with.C#.Sharp.Apr.2008.pdf #### 标题:《.NET领域驱动设计与C#》(2008年版) 该书是一本关于如何使用C#语言进行领域驱动设计(Domain-Driven Design, DDD)的经典著作。...

    面向对象分析与设计.ppt

    4. **领域驱动设计**(Domain-Driven Design,DDD):这是一种强调业务领域的中心地位的设计方法,通过将复杂的业务逻辑转化为模型,帮助开发者更好地理解问题域。DDD的核心概念包括实体、值对象、聚合根、领域事件...

    grails脚手架2次优化

    Grails的脚手架基于GORM(Grails Object Relational Mapping)和Groovy模板引擎,通过解析Domain Class自动构建出Controller、View以及相应的模板文件。在运行时,这些文件负责处理数据的增删改查操作。了解这一工作...

    基于DDD的领域建模中的模版和工具实践(36页).pdf

    通过领域模型,开发者可以清晰地表达业务逻辑,如实体(Entity)、值对象(Value Object)、聚合(Aggregate)、领域事件(Domain Event)等。 2. **限界上下文(Bounded Context)**:在复杂的系统中,领域模型...

    zhuimengshaonian-wisdom-education-v1.0.2_java_源码

    这些实体包含了业务规则和行为,如学生的选课、教师的教学等。 2. **值对象**(Value Object):值对象用来描述领域模型中的属性,如学生的年龄、成绩等,它们关注的是属性的值而不是身份。 3. **聚合根**...

    面向对象UML设计与应用

    2. **分析类图**:基于收集到的信息构建类图,展示各个类之间的关系。 3. **典型分析模式**:利用已有的分析模式来简化复杂的问题域。例如,使用“观察者模式”来处理事件驱动的系统。 4. **顺序图与责任分配模式**...

    Disco_ddd_discodingo_correctlyvpj_zip_源码.zip

    由于没有具体的源代码内容,以上分析基于DDD的一般原则。要深入理解这个项目,需要进一步查看源代码并了解其具体实现。如果你希望进一步了解某个特定的技术细节,例如代码如何实现DDD原则、解码过程是如何进行的等,...

    软件需求分析PPT资料整合pdf(有目录)

    - OMT方法(Object Modeling Technique)是一种常用的面向对象需求分析方法。 - **图形描述工具**:使用类图、对象图、状态图等图形工具来描述系统。 - **需求建模步骤**:包括识别类、定义属性和操作、建立关联...

    武汉理工大学软件构件与中间件重点

    10. **BOF (Business Object Facility)**:业务对象设施是一种用于封装业务逻辑的对象模型。BOF通常包含一系列代表特定业务领域的类和接口。 11. **BPEL=WS-BPEL=BPEL4WS (Business Process Execution Language for...

    redux-ddd-example-源码.rar

    5. **领域事件(Domain Event)**:当领域内发生重要业务变化时产生的事件,用于通知其他部分系统或领域。 二、Redux-DDD与Redux的整合 1. **Reducer**:Redux的reducer负责更新应用状态。在Redux-DDD中,reducer...

    eova_doc_1.5

    **EOVA**(Easy Object View Admin)是一款基于J2EE技术栈的快速开发平台,它利用了**JFinal**和**jQuery**两大成熟框架,极大简化了企业级Web应用的后台管理系统开发流程,能够显著减少70%的开发成本。该平台提供了...

Global site tag (gtag.js) - Google Analytics