170 likes | 357 Views
领域建模实战. 陈大峰 2009-5-15. Agenda. WHY: 为什么要建模 WHAT: 什么是领域模型 HOW: 怎样建立领域模型 领域模型的实战应用. 为什么要建模. 数字的故事 原始人: “ |||| ”个人 “ ћћћћ ”条狗 罗马 人 : XXX MMMMMMMMDCCXXXII 印度人: 30 8732. “数”“物”不分. “数”“位”不分. 建模的本质: 抽象化 符号化 正确建模带来思维力飞跃!. 什么是领域模型. 领域专家头脑中 的 不是 技术专家头脑中的 实体 业务所处理的核心对象
E N D
领域建模实战 陈大峰 2009-5-15
Agenda • WHY: 为什么要建模 • WHAT: 什么是领域模型 • HOW: 怎样建立领域模型 • 领域模型的实战应用
为什么要建模 • 数字的故事 • 原始人: • “||||”个人 • “ћћћћ”条狗 • 罗马人: • XXX • MMMMMMMMDCCXXXII • 印度人: • 30 • 8732 “数”“物”不分 “数”“位”不分 建模的本质: 抽象化 符号化 正确建模带来思维力飞跃!
什么是领域模型 • 领域专家头脑中的 • 不是技术专家头脑中的 • 实体 • 业务所处理的核心对象 • 不是技术组件 (Service, Manager, Table, Proxy, etc) • 不是行为动作 (Login/Logout, CURD, etc) • 是不是对象? • 及其关系 • 实体之间的约束和交互
怎样建模 • 找出实体 • 倾听领域专家提到的业务对象&概念 • 不要多(生造),也不要少(忽略) • 倾听,理解,确认 • 关联实体 • 基数关系(1-1, 1-*, *-*) • 所有权 & 使用权(组合 VS 聚合) • 单向 & 双向 • 整理模型 • 找出顶层实体(不被任何其他实体所有) • 找出实体树(任一非顶层实体必被且仅被一个实体所有) • 尽量去除交叉线
实例: CRM • 公司有一批销售人员、客户和合作伙伴 • 每个销售负责一批客户资源 • 每个客户都有一些联系人 • 有的客户有意和公司做一些生意(商机) • 在每个商机中 • 一些客户联系人充当不同的角色 • 一些合作伙伴充当不同的角色 • 还有一些外部的竞争对手
实战练习 • 分组练习
领域模型 VS 其他模型 • UML • UML是“通用建模语言”,可以用来描述领域模型 • UML还可描述对象模型、数据库模型、甚至UML自己 • 数据库模型(ER图) • 数据库模型是用DBA的术语(表/键)描述世界 • 领域模型用领域专家的术语描述世界 • 对象模型 • 领域模型是一种特殊的对象模型,其中的对象都是实体 • MDA • 学院派的美好梦想,工程师的残酷现实 • 模型是给人看的,模型不必和代码一一对应
领域模型的应用 • 映射 • 功能需求 • API • Database(ORM) • 架构
领域模型功能需求 • 实体 • 单个CRUD • 批量CRUD • 联系 • ?-1联系 • 邮件 1发件人 • 单选框 • ?-*联系 • 邮件 * 收件人 • 列表框+搜索+添加+删除 • 双向联系 • 邮件收件人 • 用户角色
领域模型API • 实体 (领域对象) • 属性 • getName() / setName() • 业务功能 • open() / process() • 联系 • ?-1联系 • getEntity() / setEntity() • ?-*联系 • getEntities() / addEnity() / removeEntity() AO, BO, DO是领域对象吗?
领域模型架构 Web Context VO AO CurrentUser 我们需要一个仅基于领域对象来描述和实现所有业务逻辑的干净的业务层 Biz CurrentModule Domain Model BO 领域对象不应关心数据如何展示、如何存储,而应该关心如何精准地描述实体的状态和关系 … Dal / ORM DAO DO
Take Aways • 什么领域模型? • 什么是实体?实体间有哪几种关系? • 按下面的模型,应该考虑哪些功能需求?
Q&A Thanks!