领域建模的重要性 以数据为中心的应用程序开发,面向过程分析方法的核心在于对数据库的设计。 而现在以面向对象的方式进行分析(OOA,OOD)时,领域建模就替换了上述方法的地位。 (需求和领域建模,是相互促进的两个过程。) 如何建模 1.首先应该以画图的形式进行建模。
随着业务的变化、系统设计也要演进升级。好的架构设计一定演化来的,不是一开始就设计出来的,但系统演进过程中的成本,一定是最开始的设计决定的。一个健康公司的成长,业务横向、纵向会发展的会越来越复杂,支持业务的系统也一定会越来越复杂。在领域驱动设计中,域模型对应的是业务模型,是系统架构的内核,通过域模型来驱动与外界的交互。
我们一提及领域建模,就好像回到了石器时代。然而这个谜题至今还未解决,就好像穴居人的生存方式,我们只能猜测、推测以及演绎,却不能真实复现。 没有教会领域建模的方法,只有可意会不可言传的感觉。之所以还要提方法,不过是事后诸葛亮而已。 故而,我无法解答这是否“真相”,或许我以为找到了,其实不过是火堆将领域建模的方法投影到墙上,而我凑巧是那个被锁着的囚犯。 行文至此,其实我仅仅提出了问题。
面向对象与领域建模: 我也是引用的别人的 多变且复杂的需求 如果没有多变的需求,也许就没有今天的面向对象软件,我们曾经试图通过需求管理、需求跟踪等等管理方式约束和减少需求频繁更新带给软件的冲击,可是这样下去的结果只有一个 不能期望软件人员也是其他领域专业人员,可是在中国现实中,很多人总是 无法分辨,例如某局长将整个机关考核信息化的任务交给电脑中心,这就是将考核管理专业和软件专业混同的例子, 在考核管理和软件之间需要一个领域建模专家 Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计 )简称Evans DDD, 领域建模是一种艺术的技术 领域建模的重要性 如果你说一个软件开发需要经过需求、分析和设计三个阶段的话,那么可能反映你的思想已经落伍,软件开发现在是 经过需求、建模阶段,混合了分析和设计阶段,可以更激进地说:我们国家的系统分析员和系统设计员考试也许应该合并了 领域建模属于与具体.NET或Java技术无关的设计思想,有人总是说:.NET比Java简单,其实这又是一个大误区,如果都达到同样设计水准,无论使用.NET或Java,都需要付出同样的努力;那为什么有人觉得
modeling-languages.com/sysml-extension-ecad-electrical-cable-design/ 作者 Jordi Cabot 对ECAD(计算机辅助电子设计)的核心概念做了领域建模
领域模型是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型、领域对象模型、分析对象模型。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。概念比较深奥,其实说白了就是我们把基于对业务的理解画成一个类图,并画出这些类之间的关系(面向对象)。
逸言 | 逸派胡言 本文是函数式编程思想与领域建模的第一部分,重点讲解代数数据类型与领域模型之间的关系。
领域建模的过程,是模型驱动设计的过程,也是迭代建模的过程。 不可妄求一蹴而就能获得完整的领域模型,也不可殚精竭虑地追求领域模型的尽善尽美。 领域建模的分析、设计和实现是循序渐进的增量建模,建模目标与侧重点也不尽相同。 领域分析模型负责捕捉表示领域知识的领域概念,明确它们之间的关系,形成反映现实世界的对象概念图。 聚合是领域建模阶段的基本设计单元。
简而言之,威胁建模是一个围绕假想敌开展的领域建模活动。 一些常见的威胁(攻击向量)就像领域建模里最细粒度的组件一样,共同组成了假想敌的攻击树。
属性:模型对象的特征表现 状态:状态机 边界:对象模型间交互部分,分清楚哪些属于A对象哪些是B对象 完善对象模型: 图3.对象模型(模拟字段信息) (6)领域对象到数据模型 Note: 派生:数据模型之间的一种关联
3.4 Anchor 模型 Anchor 对 Data Vault 模型做了进一步的规范化处理,它的核心思想是所有的扩展只是添加而不是修改,因此将模型规范到6NF,基本变成了 k-v 结构化模型。
Tech 导读 DDD领域建模被各个大小厂商提起并应用,而每个人都有自己的理解,本文就是针对小白,系统地讲解DDD到底是什么,解决了什么问题,及一些建议和实践。 20多年前,顶尖的软件设计人员已经意识到领域建模和设计的重要性。尽管没有被清楚的表述出来,在对象社区涌动着一种新的思潮,Eric Evans把它称为领域驱动设计。 在面向过程,面向函数,面向对象的编程语言中,面向对象无疑是领域建模最佳方式。 类和表有以下几个显著区别,这些区别对领域建模的表达丰富度有显著的差别,有了封装、继承、多态,对领域模型的表达要生动得多,对SOLID原则的遵守也会严谨很多。 由于不再承载领域建模这个特性,数据库的设计可以变得天马行空,任何可以加速存储和搜索的手段都可以用上,可以用column数据库,可以用document数据库,可以设计非常精巧的中间表去完成大数据的查询。
操练题目:微信朋友圈权限领域建模操练 题目描述:为了提升开发人员编写正确的代码和用正确的方法编写代码的实践能力,可以使用逆向工程的思路和面向对象的分析、设计和编程(Object-Oriented Analysis , Design and Programming, OOADP)方法,为微信朋友圈权限(设置->朋友权限->朋友圈)中的“不让他(她)看”和“不看他(她)”两个功能进行领域建模,设计出包括属性和方法的领域类及其之间的关系 软件开发过程中的科目和阶段与“领域建模7步法” 1 需求启发:微信朋友圈权限控制功能 2 系统愿景:识别价值和痛点 3 系统上下文:识别用户和依赖系统 4 责任风暴:梳理服务、责任和业务规则 5 领域模型 (分析):识别领域类及其之间的相互关系 6 领域模型(设计):丰富领域类的属性和方法以指导编程 7 编写代码和单元测试 练家痛点与提示 课件
本训练强化分析和设计(领域建模和领域驱动设计)的技能,使软件组织迈向基于核心域的复用,降低开发维护成本。 以下是UMLChina参与(书上有UMLChina标记)的分析和设计(领域建模和领域驱动设计)相关的书籍。 分析(领域建模) --建模方法学选择和基本概念 --提炼领域概念的要点 --核心域透镜 --DDD“新词”祛魅(通用语言、实体……) --提炼领域概念之间的关系 --不变式和对象约束语言OCL --彩色建模架构型介绍和应用
背景 之前有同事在分享DDD在闲鱼商品详情页的实践时,大家对闲鱼团队领域建模关于商品详情页的聚合根建模表示不认同。 因为这是面向页面建模,不是面向领域建模,将微服务拆分和领域建模混为一谈了 于是我以聚合根定义作为引子,结合组内在实践DDD过程中,聚合根随着业务查询复杂而导致聚合根不断膨胀的问题,提出借鉴CQRS读写分离的理念 通常我们说领域建模不应该去考虑微服务架构,工程结构,应该专注于业务。 但在实践过程中发现这并不是一个好的方式,或者说是可落地的。 因为业务领域建模完成后,还是要反映到系统架构中, 最终是要落地到代码实现,通过代码来表达出领域模型。所以说我们的讨论不应该是脱离 系统架构的。 下期问题 目前我们只讨论了实体类型的聚合根,没有讨论业务过程的聚合根,比如转账 引用 https://www.jianshu.com/p/e6c2fdef8db6
pdf文件下载:http://umlchina.com/training/umlchina_ddd_02_domainmodeling_structure.pdf
用一句话讲领域建模的根本目的就是统一认识、减少沟通成本。 这句话听起来很简单,但其实有两个层面的含义:一是工程技术规范,指的是业内规范;二是业务认识,指统一业务、开发、测试、产品的认识。 然而要做到统一与规范是很难的,开发喜欢从技术层面去描述问题,产品习惯从业务层面描述问题,双方沟通成本较大,此时领域建模就能够起到“一图胜千言”的作用。 领域建模的关键是找到业务的流程节点,找到业务流程节点就成功了一半。正如在小学做阅读理解一样,重要的是概括文章中心思想和段落划分。 比如商品领域建模、优惠券领域建模等。 其次,模是模型,反映到业务上,模就是业务场景的映射,换言之,通过模型就能推导出业务场景,反之也一样,通过业务场景也能推导出模型,所以,不懂业务无法建模。 以上就是领域建模的三步方法,没有任何高深的理论,都是简单朴素的方法,但重要的是了解业务,因为领域建模源于业务,又服务于业务。
pdf文件下载:http://umlchina.com/training/umlchina_ddd_02_domainmodeling_structure.pdf
domainmodeling_structure.pdf [推荐升级]23套UML+EA和StarUML的建模示范视频-全程字幕(2022.6.1更新) 6月
比如,采用 DDD 软件设计时,首先要领域建模,然后将领域模型转换为程序设计,还要有仓库和工厂,并构建支持 DDD 的平台架构。在项目初期,DDD 没有任何优势。 3 天时间,6大篇章、19节干货,带你从业务价值角度,彻底看透 DDD 的本质。 ? 原价 ¥499,限时 ¥0.99 立刻学习! ? 长按扫码? 本期精品课程为期 3 天,内容由 6 大篇章 19 节干货构成,包括: Day01 DDD设计篇:运用事件风暴法进行业务领域建模、统一语言建模 Day02 DDD实践篇:通过领域模型落地系统设计:数据库 DDD架构篇:掌握如何通过架构支持领域驱动在项目中的落地 模块一:顶级业务架构师必备技术栈赋能篇 领域驱动设计是业务架构师必备的技术栈,课程将深入浅出帮助你理解 DDD,并让你在理解业务架构的基础上,掌握领域建模 课程都有哪些特色 (1)用实战案例演练业务领域建模的分析设计过程 (2)通过实战学习与客户进行统一语言建模,提高学习业务的能力 (3)演练在业务需求不断更迭的过程中通过DDD设计越来越复杂的系统 (4)