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

ddd的战术篇: domain object之一 ddd的建模战术。 介绍几种主要的领域对象(domain object)。entity, value object, aggregate, repository 比较domain object的建模方式与active record模式的区别 阅读详情
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的关系,都有助细粒度的分析系统的业务行为,做出合理的设计方案。
    (听上去更像是口号宣传)
 
Alibabab技术专家详解 DDD 系列- Domain Primitive 前言: 对于一个架构师来说,在软件开发中如何降低系统复杂度是一个永恒的挑战,无论是 94 年 GoF 的 Design Patterns , 99 年的 Martin Fowler 的 Refactoring , 02 年的 P of EAA ,还是 03 年的 Enterprise Integration Patterns ,都是通过一系列的设计模式或范例来降低一些常见的复杂度。但是问题在于,这些书的理念是通过技术手段解决技术问题,但并没有从根本上解决业务的问题。所以 03 年 Eric Evans 的 阅读详情

相关推荐

一缕阳光:DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)?

写在前面   阅读目录: 问题根源是什么?《领域驱动设计-软件核心复杂性应对之道》分层概念Repository(仓储)职责所在?Domain Model(领域模型)重新设计Domain Service(领域服务)的加入MessageManager.Domain.Tests 的加入Application Layer(应用层)的协调?Unit Of Work(工

jygongweibin的专栏 939

Domain Object 的思考(一)

我们建一个简单的表如下: +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | va...

徐祥军 326

Domain Object领域模型解说

Domain Object领域模型学习、设计、分析资料,错过别后悔。

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

Domain Object :基于业务行为的分析 ——Domain Object 的动静之分,及其与 Business Process 的关系 Author:Anders小明     一、Domain Object的动静之分 1.1 动静的标准是什么? 在系统运行期间,被频繁建立和更新的称为“ 动态” ,而在较长的一段时间内保持稳定的称为 “ 静态” 。   1.2 考查Domain Object...

Anders小明的Blog 295

springboot+shardingsphere+druid 实现基于时间的水平分表

使用shardingsphere基于时间字段的动态水平分片。

weixin_42207940的博客 2627

案例分析|一篇文章带你看懂养鸡场智慧管理系统

养鸡场智慧管理系统是为了满足现代化养鸡业对精细化管理的需求而设计的一款专业软件。随着科技的发展和农业产业的升级,传统的手工记录和管理方式已无法满足高效、准确和实时的数据跟踪需求。本软件旨在通过集成各种功能模块,帮助养鸡场主实现从鸡苗孵化、饲养管理、饲料控制到销售结算等全链条的智能化操作。该系统的核心目标是提升养鸡场的运营效率和盈利能力,通过自动化数据处理,减少人工误差,节省时间和精力。例如,孵化报表和记录模块可以帮助管理者实时监控孵化过程,及时调整策略;

muyu2980的专栏 930

让域对象(Domain Object)纵穿整个系统

——结合使用Webwork2和Hibernate简化系统结构、提高开发效率引子如果狭隘的理解,很多时候,一个运行于B/S平台的业务系统的工作是接受用户从浏览器端输入的信息,经过处理后存储到数据库,或者,从数据库提取数据处理并格式化后传回浏览器显示给用户。然而,让应用设计者很沮丧的是:浏览器功能很弱,只能提交复杂度极低的信息,如携带着文本信息的表单(form);主流的数据库是关系数据库,并不能直接存

徐光宗的废纸篓 1610

【从零开始学产品经理】项目立项实战(1)——基本方案与可行性分析:基于微信小程序的记账本

主要阶段:立项-设计-开发-测试-上线-运营-总结。

Ckiyvo的博客 3211

关于rich domain object的一点总结

晚上在论坛上瞎逛,翻到 了一个讨论rich domain object的帖子,最后还是那句话,怎么合适就怎么来,管它是poor还是rich。企业应用总是离不开和数据库打交道,那么在domain object中不应该关心持久化问题。所以呢,如果使用java,dao还是要的。 从[url]http://www.javaresearch.org/article/68086.htm[/url]和[url...

iteye_3054的博客 328

Sony微单相机alpha6000 wifi远程控制(1)

引言 Sony’s Camera Remote API beta SDK allows you to control a number of Sony cameras, including Sony Action cams, Sony Alpha cameras and Lens Style cameras, wirelessly from another device. 索尼于2017年三月Re...

markfuk996的博客 4966

意图识别和纠错问题

可想而知,错误的意图识别会带来多大的负面影响。基于词典,就是对用户query内容和词典内容进行比对,比较常见的方式是序列标注问题里用的最大逆向匹配,通过这种方式找到词典里的实体词,匹配触发了自然就有意图了,而在词典匹配的时候,不是使用链表之类的来构造匹配结构,而是使用搜索树的结构,这种匹配的复杂度最低,速度也快,两者结合,其速度甚至比很多模型要快得多(基本上1ms以内就能完成),fasttext速度非常快,但是textcnn之类的其实就已经达到ms级别以上,bert甚至在10ms级别。

TURING.DT 4573

Business Domain & Domain Model & Domain Model Oriented Archtecture

光提“Domain”,不包含上下文,你会怎么理解?擅长业务分析的人,可能马上想到了 Business Domain ; 擅长业务建模的人,会以为你在指 Object Domain Model,包括Conceptual级别的和Run-Time级别的 ;擅长系统架构的人,会把>里面的Domain Model和围绕Domain Model的所有系统架构模式(比如很多经典的O/R Map模式)牵扯进来。我

Evan's Tech View 1525

阿里云CDN HTTPS 证书配置流程

可以使用HTTPS方式访问资源,如果浏览器中URL旁边出现锁的HTTPS标识,表示HTTPS安全加速已生效。: 证书配置完成后,需要留意证书过期时间并在证书过期前手动配置新的证书。注意 ⚠️ 一定是需要复制 以下标识之间的内容。如果已在阿里云数字证书管理服务中购买了证书,请选择。,该证书将在阿里云数字证书管理服务中保存。如果使用第三方服务商签发的证书,请选择。第四步,在指定域名的左侧导航栏,单击。第二步,在左侧导航栏,单击。开关,并配置证书相关参数。页面,找到目标域名,单击。中选择已购买的证书。

w风雨无阻w的专栏 2209

业务领域建模Domain Modeling

业务领域建模Domain Modeling Collect application domain information focus on the functional requirements – also consider other requirements and documents 什么是业务领域建模? 业务建模(Business Modeling)是以软件模型方式描述企业管理...

P71720的博客 641

置顶必读(1) | 2026最新首发,全网最全 Spring Boot 学习宝典(附思维导图)

从0到1以知识点+实例+项目的教学模式对SpringBoot框架由浅入深进行学习,快来跟bug菌一起学习吧。

**My Coding Family** 16万+

【异常】OpenClaw 飞书端 OpenClaw: access not configured. Pairing code: [] Ask the bot owner to approve with

摘要: OpenClaw飞书机器人交互中出现的access not configured报错,是因用户或组织未配置访问权限触发的拦截提示。报错包含组织单元ID和配对校验码,需管理员审批开通权限。普通用户需提交完整报错信息给管理员处理;管理员可通过执行标准化命令单次审批,或批量配置组织白名单优化权限管理。建议提前梳理权限范围、及时同步组织架构变更,并定期审计权限列表以确保安全合规。

奶爸的编程之路,也就一周冷个三天 371

小议领域模型(Domain Model)

(同步自http://www.blogjava.net/AndersLin/archive/2006/06/15/53086.html)  > 和>,令Domain 这个词很火,也引起了广泛争论。我这里也乱谈一把。什么是领域模型(Domain Model)   我以为Domain分两个含义:Domain Object和Domain Service。那么什么样的系统是面向Domain的系

Anders小明的Blog 2293

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

domain-admin监控依赖:服务依赖关系分析

Domain Admin是一个基于Python + Vue3.js技术栈实现的域名和SSL证书监测平台,用于集中管理不同业务域名的SSL证书,提供到期提醒功能,避免因证书过期导致的线上访问异常。本文将深入分析Domain Admin的监控依赖体系,包括外部依赖库、内部服务架构以及各组件之间的依赖关系。 ## 外部依赖分析 ### 核心框架依赖 ```mermaid pie title Dom...

gitblog_00822的博客 1009

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

domain-admin监控聚合:多指标聚合分析

在现代分布式系统中,域名和SSL证书的管理已成为企业运维的核心环节。随着业务规模的扩大,单个域名可能关联多个服务端点,而SSL证书的有效性直接关系到服务的安全性和可用性。传统的分散式监控往往面临以下痛点: - **监控盲区**:不同业务域名的SSL证书分散在不同平台申请 - **通知延迟**:到期提醒无法及时触达,导致服务中断风险 - **数据孤岛**:监控指标分散,缺乏统一的聚合分析视图 - ...

gitblog_01155的博客 1051

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大型前端项目的目录结构演进:从 feature-based 到 domain-driven 的架构变迁

目录结构是前端架构的物理映射。一个混乱的目录结构意味着混乱的模块边界、混乱的依赖关系、混乱的团队分工。本文梳理三个阶段的目录结构演进路径,从传统的 type-based 到 feature-based,再到 domain-driven,每一阶段的驱动力和适用场景。

大山哥 3465

如何用OpenSEO的Domain Overview分析竞争对手网站:从0到1的5步完整指南

OpenSEO 是一款开源的 SEO 工具(可视为 Semrush 和 Ahrefs 的开源替代方案),它的 **Domain Overview(域名概览)** 功能是新手做**竞品网站分析**的利器:只需输入竞争对手的域名,就能看到这个网站的**预估自然搜索流量**、**自然关键词数量**、Top 关键词和 Top 页面。本文将手把手教你用 Domain Overview 完成一次完整的**竞争

gitblog_00055的博客 855

Playwright+Cucumber BDD实战:构建可维护的业务行为契约流水线

BDD(行为驱动开发)是一种以业务语言定义系统行为的协作范式,其核心在于将需求转化为可执行、可验证的自动化规范。Playwright凭借稳定真实的浏览器交互能力与高性能Trace调试支持,成为BDD执行层的理想载体;而Cucumber通过Gherkin语法实现跨角色对齐,但二者成功整合的关键在于职责分离——Cucumber专注表达‘什么行为’,Playwright专注实现‘如何履约’。本文围绕Domain Service Layer设计、Step Definition解耦、信创环境Chromium适配及CI

weixin_33698823的博客 695

JPA的domain包和entity包有什么区别

domain包存放业务领域对象(DomainModel),代表业务概念;entity包存放数据库实体(Entity),用于与数据库表映射。两者职责不同但常一一对应:entity负责数据存储(含JPA注解),domain处理业务逻辑(不含数据库依赖)。典型分层架构中,entity是"数据库的影子",domain是"业务的灵魂",通过职责分离降低耦合、提高可读性,便于重构和DDD实践。建议保持两者对应关系,在Service层完成转换,避免domain混入JPA注解。这种结

qq_61723836的博客 641
上一篇: Domain Object:基于业务行为的分析
下一篇: 开发式编程,声明式编程和产生式编程
林仪明
博客等级 码龄25年 313粉丝 61原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值