精华内容
下载资源
问答
  • 领域建模

    2021-01-27 15:16:12
    本文来自博客园,本文全面讲解以DDD为代表的开发模式与传统CRUD的领域建模。 80后程序员都知道,我们国家“系统分析师”和“系统设计师”是两种不同的职称考试,也就是分析系统和设计系统不是同一个人,这种割裂导致...
  • DDD领域建模.xmind

    2021-04-07 17:53:27
    DDD领域建模和TDD相关知识
  • 领域建模 领域建模-概念与数据建模
    展开全文
  • 领域建模和架构说明

    2017-11-16 11:14:45
    领域驱动设计、领域建模和架构说明、领域建模和架构说明
  • 建立领域建模的范围

    2021-03-03 01:32:21
    本文内容包括:什么是领域建模?建立领域模型的作用域细化领域模型回顾领域模型理解复杂IT挑战的一点帮助注释参考资料在金融服务开发环境中,领域建模可以帮助系统结构把当前交易环境可视化,并决定如何对各种系统...
  • DDD领域建模和TDD知识
  • 领域建模详解

    千次阅读 2020-03-23 16:32:39
    领域建模。 从领域模型开始,我们就开始了面向对象的分析和设计过程,可以说,领域模型是完成从需求分析到面向对象设计的一座桥梁。 顾名思义,就是显示最重要的业务概念和它们之间关系,是真实世界各个事物的表示...

    学会了面向对象的语法,却依然写不出面向对象的程序,因此我们需要了解如何从需求分析到面向对象设计这样一个过程。

     

    一,什么是领域模型

    领域建模。 从领域模型开始,我们就开始了面向对象的分析和设计过程,可以说,领域模型是完成从需求分析到面向对象设计的一座桥梁。 

    顾名思义,就是显示最重要的业务概念和它们之间关系,是真实世界各个事物的表示(现实世界的可视化抽象字典)而不是软件中各构件的表示。(类:表示业务概念,通常只包含重要属性,少甚至不包含操作;关联、泛化:表达概念之间的关系)领域模型是描述业务领域(业务实体)的静态结构

     

    理论派观点:

    • Domain Model是一个商业建模范畴概念,即使一个企业不开发软件,也具备其业务模型;
    • 所有同行企业,其业务模型必定有非常大的共性和内在的规律性。
    • 由行业内的各个企业的业务模型再向上抽象出整个行业的业务模型,这个模型称之为“领域模型”。

    实战派观点:

    • 领域模型是一个分析模型,帮助系统分析人员、用户认识现实业务的工具,描述的是业务中涉及到的实体及其相互之间的关系,它是需求分析的产物,与问题域相关。
    • 是需求分析人员与用户交流的有力工具,是彼此交流的语言。

    理论派

    领域模型是一种特殊的业务模型,它分析范围是整个行业,抽象出行业里共性和内在规律性的业务,比业务模型更加抽象,它不属于软件开发范畴的概念,与软件开发无关。

    实战派

    领域模型是一种分析模型,在软件开发过程分析阶段用于分析如何满足系统功能性需求,属于软件开发范畴,在UML中主要使用类图来描述领域模型。

    业务模型是业务建模的输出物,业务建模研究的对象是公司或者组织,业务建模属于软件开发过程中的初始阶段。

    软件开发过程:业务建模、需求、分析、设计。

    在软件开发过程中我们接触到的领域模型属于实战派

    从这个定义我们可以看出,领域模型有两个主要的作用:

    1. 发掘重要的业务领域概念
    2. 建立业务领域概念之间的关系  

    二,如何领域建模

    领域模型如此重要,很多同学可能会认为领域建模很复杂,需要很高的技巧。事实上领域建模非常简单,概括一下就是“找名词”! 

    一个关键的问题还没有说明:从哪里找? 如果你还记得领域模型是“需求到面向对象的桥梁”,那么你肯定一下子就能想到:从需求模型中找,具 体来说就是从用例中找。 

    归纳一下域建模的方法就是“从用例中找名词”。 当然,找到名词后,为了能够更加符合面向对象的要求和特点,我们还需要对这些名词进一步完善,这就 是接下来的步骤:加属性,连关系! 

    最后我们总结出领域建模的三字经方法:找名词、加属性、连关系。 

     

    A. 发现类和对象:尽可能多的找出概念类(识别方法:概念类分类列表、名词性短语)

    a.概念分类列表:人、事物、地点、组织、概念、事件、规则、抽象名词、交易项目、角色、设备、组织结构(对用例进行识别:实体、过程中的信息、角色的输入输出、操作设备等)

    b.名词分析法:识别问题域和用例描述中的名词和名词性短语作为候选的概念类和属性,从候选项中,摒弃多余的名词,确定最终的对象(注意是作为类还是属性,类可以是一种标识、状态和行为)

    B. 建立类之间的关联(关联、继承、依赖)

    关联:类之间的某种语义关系包括聚合,组合

    继承:一般到特殊

    依赖:表明一个元素(源元素)的定义或实现依赖另一个元素(被依赖元素)的定义或实现

    C. 添加类的重要属性(类的语义完整性、类的作用、问题域相关特性等)

    a.语法:可见性 属性名:类型 多重性=默认值{特性表}  

           /  [可见性] 属性名 [:类型] [=初始值]

    b.属性类型是简单的数据类型为佳,如果是复杂概念,考虑是否单独作为一个概念类

    c.任何属性都不表示外键,即不应该用属性来联系概念类,区别于数据库设计中的外键

    参考资料:云南大学软件学院PPT  https://wenku.baidu.com/view/b5dfce3303d8ce2f00662382.html  

    三、实例

    找名词

    who : 学员、讲师、管理员

    用例:

    1. 管理员 创建了 北京 和 上海 两个校区

    2. 管理员 创建了 Linux \ Python \ Go 3个课程 

    3. 管理员 创建了 北京校区的Python 16期, Go开发第一期,和上海校区的Linux 36期 班级

    4. 管理员 创建了 北京校区的 学员 小晴 ,并将其 分配 在了 班级  python 16期 

    5. 管理员 创建了 讲师 Alex , 并将其分配 给了 班级 python 16期 和全栈脱产5期

    6. 讲师 Alex 创建 了一条 python 16期的 上课纪录 Day6 

    7. 讲师 Alex 为Day6这节课 所有的学员 批了作业 ,小晴得了A, 李磊得了C-, 严帅得了B

    8. 学员小晴 在 python 16 的 day6里 提交了作业 

    9. 学员李磊 查看了自己所报的所有课程 

    10 学员 李磊  在 查看了 自己在 py16期 的 成绩列表 ,然后自杀了

    11. 学员小晴  跟 讲师 Alex 表白了

     名词列表:

    管理员、校区、课程、班级、上课纪录、作业、成绩、讲师、学员

    加属性

    连关系 

    有了类,也有了属性,接下来自然就是找出它们的关系了。

     

     

    展开全文
  • 谈谈领域建模

    千次阅读 2020-10-09 11:00:57
    这篇文章总结了我对领域建模的看法和方法论,也相当于汇总了各位大师对领域建模的不同思想。   领域建模的目标,是解决复杂业务中软件开发的一系列问题。领域建模也是实现这个目标的一条路径,一种方法论。在实践.

    转自:http://www.fanyilun.me/2018/04/08/%E8%B0%88%E8%B0%88%E9%A2%86%E5%9F%9F%E5%BB%BA%E6%A8%A1/

    哥们写的很用心,建议看原文

     

    1 前言

      最近工作中,我对于模型的设计,尤其是“领域模型”的设计有一些思考和讨论。这篇文章总结了我对领域建模的看法和方法论,也相当于汇总了各位大师对领域建模的不同思想。
      领域建模的目标,是解决复杂业务中软件开发的一系列问题。领域建模也是实现这个目标的一条路径,一种方法论。在实践的过程中可能有一种似曾相识的感觉:虽然没听过这个概念,但是这种做法很有道理而且有可能我们本身就在做。
      需要注意的是,领域建模的方法有多种,甚至关于领域模型本身的定义也有一些模糊之处。不同的方法论和流派思路大体相似,在细节上还有一些区别。不过条条大路通罗马,他们没有对错之分。
      本文更多表现的是我对领域建模的理解,也希望对各位有所启发。

    2 什么是领域模型

    2.1 定义

      领域模型,在本文中的定义源于《UML和模式应用》[1],这本书对领域建模的概述是最完整、可操作性最强的。

    领域模型(domain model)是对领域内的概念类或现实世界中对象的可视化表示。领域模型也成为概念模型、领域对象模型和分析对象模型。

      领域模型是一种概念模型,也叫问题域模型。它表述的是某个领域的现实概念。

    2.2 与其他作者的定义的异同

      本文提到的领域模型,基于C Larman在书中的定义。同时与其他作者定义的模型区别如下:

    作者定义出处异同
    Martin FowlerConceptual modelAnalysis Patterns: Reusable Object Models [3]相同
    Martin FowlerDomain ModelPatterns of Enterprise Application Architecture [4]不同。这里的领域模型指的是solution space的领域层的模型对象,也就是本文指的系统模型。其定义需要包括行为和数据的对象模型,即充血模型。
    Eric EvansModelDomain-Driven Design –Tackling Complexity in the Heart of Software [5]不完全相同。这本经典的DDD理论,不再将分析模型和程序设计分离开,而是寻求一种能满足这两方面的单一模型。因此DDD的模型既是领域模型,又是系统模型。同时,通用语言也可以算作领域模型的一部分。
    George FairbanksDomain ModelJust Enough Software Architecture [6]相同
    Object Management GroupComputation Independent Model (CIM)OMG. MDA Guide Version 1.0.1相同
    Grady BoochObject-oriented analysisObject-oriented Analysis and Design with Applications, 3rd edition [7]相同。面向对象分析的产出物就是问题域模型。

      其实可以看到,自从面向对象出现以来,出现了很多模型的分析和设计的方法(包括一些需求分析的方法)。其中有一点是共通的:程序设计要从问题域出发,用问题域分析出的模型来指导程序设计。

    2.3 领域模型的特点

    总结一下,领域模型具有如下的特点:

    • 领域模型是业务概念的可视化描述,是需求分析的产物
    • 领域模型用于指导程序设计,但领域模型与实现方式无关,领域建模时不应该考虑如何实现
    • 领域模型需要同项目所有成员(客户、项目经理、开发、测试…)达成共识

    3 为什么要做领域建模

      首先,建模的重要性在所有工程实践中都已经得到了广泛的认同。建模是一种抽象和分解的方法,它可以将复杂的问题拆解成一个个抽象,代表了特定的一块密集而内聚的信息。[7]
      上世纪80年代开始,人们对于面向对象建模产生了许多思考和方法,其中最流行的就是面向对象分析与设计[8]。面向对象分析,强调的是在问题域发现并描述概念,解决的问题是做正确的事情。面向对象设计,强调的是定义软件对象,解决的问题是正确的做事情
      领域模型就是面向对象分析的主要产物,它表达了对现实问题的描述和抽象。

      不过我们为什么要按照这种流程来进行开发呢?理论上说,如果不做分析和设计,你也可以直接去做代码实现(甚至使用面向过程的编程语言),一样可以完成软件的功能需求。

    • 如果不做设计直接实现,俗称走一步看一步。很大可能在开发过程中发现思维局限,开发进度推倒重来。
    • 如果不做分析直接设计,看起来没什么问题。遗憾的是,通过这种方式构造的代码,并没有和现实世界连接起来,当我们的软件和需求稍加修改,这份代码就可能变得异常混乱和难以维护。而通过领域建模的,自上而下的设计,可以保证代码实现的层次结构和模块划分是科学的、稳定的。
      • 举一个例子,在某电商系统的初期设计中,一个卖家账号只能开一个店铺,因此卖家和店铺的概念全部由卖家这一个模型来承载。所有店铺相关的模型(店铺红包、店铺评价等)全部与卖家模型做关联。这时,同一个模型拥有了两层业务含义,职责不明确。
      • 再举一个例子,在我做的电商供应链管理系统中,对于箱规的定义起初并没有抽象出模型。随着系统更深入的发展,我们发现在多个模型里都维护着箱规,包括商品、货品甚至补货模型里都有着箱规的定义。此时各领域如果没有明确的职责划分,造成同一个模型在多个系统同时维护,势必会带来混乱。
      • 想一下,按照上面的模型会有什么危害呢?

    总结:
      领域建模可以降低软件和现实世界之间的差异,用真实的业务概念划分职责,目的是实现一个可以高效低成本维护的可持续发展的软件系统。
      从领域模型推导到系统实现是一套引导思考的方式,也是一套科学的开发流程。其核心目的在于提供了系统设计的“指导方针”。领域模型必须站在用户需求和业务发展的角度上,既可以用来同客户沟通验证需求,又可以避免模型因实现的考量而带偏(实现成本、遗留系统)。

    4 如何进行领域建模

      同样,领域建模的方法也有很多种。下面列出的是一些常见的方法。需要注意,领域建模是需要依赖大量经验和思考的,各种方法起到的都是引导思路的作用:

    4.1 用例分析法

      用例分析法是进行领域建模最简单可行的方式。其步骤如下:

    • 1.获取用例描述
      • 既然我们的领域模型指的是问题域模型,那么建模也一定要从问题域入手。那么问题域的知识如何表现出来呢,一个最常见的方式就是通过用例,也可以通过场景Scenario来分析——总之就是一段格式化的需求文字描述
    • 2.寻找概念类
      • 寻找概念类就是对获取的用例描述进行语言分析,识别名词和名词短语,将其作为候选的概念类。
      • 当然,需求描述中的名词不可能完全等价于概念类,自然语言中的同义词、多义词都需要在此处进行区分。还有很多名词可能只是概念类的属性,不过没关系,在这一步骤可以都提取出来,在第四步再区分出概念类和属性。
    • 3.添加关联
      • 关联意味着两个模型之间存在语义联系,在用例中的表现通常为两个名词被动词连接起来:
      • 并非所有动词关联的概念类都需要作为关联存在,更重要的是我们需要判断,两个概念类的关系是否需要被记住:
        • 试想你是一个业务员,如果某两个概念类的实例之间的关系没有任何人知道,是否会阻碍业务的开展。如果答案是肯定的,那么说明这两个概念类存在关联。如果答案是否定的,那么建议不要加上关联(视情况,也要考虑逻辑上二者的关系是否“被记住”)。
        • 应该尽量避免加入大量关联
        • 关联不代表数据流,也不代表系统调用关系
    • 4.添加属性
      • 对于上文抽取到的名词列表,我们需要区分概念类和属性(当然名词列表也会有无用的词语)。
      • 如何判断一个名词是否是属性?
        • 能完全通过基本数据类型(数字、文本、日期)表达的大多是属性。
        • 如果一个名词只关联一个概念类,并且它自身没有属性,那么他就是另一个概念类的属性。
      • 注意这里表达的依然是业务概念,外键ID不是属性
    • 5.*模型精化
      • 模型精化是可选的步骤,有时我们希望在领域模型中表达更多的信息,这时会利用一些新的手段来表达领域模型:包括泛化、组合、子域划分等
      • 领域模型可以使用UML的泛化和组合表达模型间的关系,他们表达的是概念类的”is-a”和”has-a”的关系,并不是实现的软件类的关系。然而,也一些方法论中并不建议使用这种方式来表达领域模型,因为这种精化的领域模型不利于和需求方沟通。
      • 子领域划分是常见的拆解领域的方式,通常来说我们会将更内聚的一组模型划分为一个子领域,形成更高一层的抽象。利于系统的表达和分工。

    下面举个例子,内容来自《Object-Oriented Analysis from Textual Specifications》[9]论文,该文章讲述了如何通过自然语言分析来做面向对象分析(OOA)。

    • 用例描述:
      • Vendors may be sales employees or companiesSales employees receive a basic wage and a commission, whereas companies only receive a commission. Each order corresponds to one vendor only, and each vendor has made at least one order, which is identified by an order number. One basic wage may be paid to several sales employees. The same commission may be paid to several sales employees and companies
      • 如上,我们把所有名词标记出来:vendors, sales employees, companies, basic wage, commission, order, order number,他们作为概念类的候选类
      • 接下来为他们添加关联,连接这些名词的动词会出现在关联的线上:
      • 最后,为这些候选的概念类选择属性,在本例中,如果一个概念类只处于一个被动的关联关系中(如basic wage, commission, order number),那么它需要作为关联类的属性。

    4.2 DDD的方法

      Eric Evans的著作Domain-Driven Design领域驱动设计,简称DDD。DDD是一套软件开发方法论,用来解决复杂的现实问题。
      DDD本身是一套完整、详尽的方法论,从如何需求沟通(构建领域知识),到高层设计(战略建模)、详细设计(战术建模),细致到代码的实现风格都给出了示例。本文无意也无力来详述DDD的所有知识,但是关于如何建模,DDD给出了很多思想可以借鉴。
      需要再次强调的是,DDD的模型本质上是solution space的模型,然而DDD强调模型与实现绑定,因此这里指的“模型”,可以说是领域模型,也可以是系统模型。下面就是DDD建模的一般步骤:

    • 构建领域知识
      • 软件的最终目的是增进一个特定的领域。为了达到这个目的,软件需要跟要它服务的领域”和谐相处”。所谓和谐相处,软件需要精确地反应领域概念和知识,以更好的适应变化。
      • 因此,软件开发者第一步也是最重要的一步就是理解领域知识。DDD鼓励开发者和领域专家工作在一起,通过交谈和提问,让开发者学习到领域知识,挖掘出领域的关键概念。
    • 创建通用语言
      • 通用语言是领域专家和开发团队之间定义的标准的术语。目的是把领域知识更完善地传达到软件中。
    • 团队在进行所有方式的沟通时(文字,演讲,图形)都需要采用这种一致的语言。
      • 通用语言需要映射到模型中,映射到代码里。做到通用语言的更改就是对模型的更改,也是对代码的更改。
    • 创建实体
      • 基于通用语言和领域知识,需要首先分辨出实体。
      • 实体是领域中需要唯一标识的领域概念。如果两个实体所有状态都一样,但标识不一样,就是两个不同的实体。
      • 实体同样需要属性来描述
    • 创建值对象
      • 值对象是领域中不需要唯一标识的领域概念。
      • 如果两份对象所有状态都一样,我们就认为是同一个值对象。值对象也可以理解为一组聚合的属性。例如地址信息,类目信息。
    • 创建聚合根
      • 聚合根是一个实体,将一组模型聚合在一起,与外部模型划分开来。这一组模型全部关联着聚合根,只有聚合根负责与外部访问。
      • 聚合根有助于保持领域模型关联的简化和生命周期的维护。

    4.3 四色建模法

      四色建模法源于《Java Modeling In Color With UML》[10],它是一种模型的分析和设计方法,通过把所有模型分为四种类型,帮助模型做到清晰、可追溯。

    • 四色模型
      • moment-interval(时标性原型):时标性原型是建模的起点,它代表着我们需要记录的,某一时刻发生的事件。例如订单,行程,会议。
      • party, place, or thing(人-事-物原型):一种有形的,可唯一识别的实体。可以是人、机构、地点、物品等。
      • role (角色原型):角色是party, place, or thing的一种参与方式。例如,在一份雇佣关系中,某个人扮演者雇员的角色。那么这个人就是”party, place, or thing”,雇员就是”role”。
      • description(描述原型):表示资料类型的资源,是一种类似目录条目的描述,用来对对象进行分类或标记,可以被其它原型反复使用。例如,一个商品的品牌、描述属性。
    • 建模次序[11]
      • 首先以满足管理和运营的需要为前提,寻找需要追溯的事件。
      • 根据这些需要追溯,寻找足迹以及相应的时标性原型
      • 寻找时标对象周围的人-事-物
      • 从中抽象角色
      • 把一些信息用描述对象补足。

    5 从领域模型到系统模型

      提到模型,大多数人第一反应就是一个类或者对象,我这里指的系统模型就是这种概念。
      为了保证程序实现能够遵循领域模型的思想,为了让所有人对领域和职责的认知没有偏差,我强烈建议每个领域模型都要有一个系统模型与之对应,最好能完全一一对应(DDD就是这么做的),他们的命名和属性也尽可能保持一致,使用相同的术语。
      具体到系统模型的设计,就是面向对象设计的范畴了,这里可以使用各种各样的设计模式、GRASP、SOLID去设计和规划,本文就不在此展开。
      需要遵循的宗旨是,领域模型的模型职责、子域边界划分应该作为此处设计的指导原则,在实现中的每个模块不可以突破这些职责约束。

    6 领域模型与系统架构

      既然谈到了架构,我们先看看什么是架构,下面是ISO/IEC/IEEE 42010对软件架构的定义[12]:

    fundamental concepts or properties of a system in its environment embodied in its elements, relationships, and in the principles of its design and evolution

    可以看到有三个要素,elements,relationships,principles:

    • element就是系统的组成成分。
      • 但实际上,系统可拆解的角度非常之多,可以是应用部署结构(物理架构),可以是进程,可以是微服务,可以是系统模型……
      • 在本文所指的业务系统架构中,更倾向于element指的是一个个系统模块,它囊括了若干系统模型,组成一个内聚的职责明确的模块
      • 这些拆解方式有一个共同点,需要是最高层次的分解,因此需要粗粒度的,足够简单,让人容易理解。
    • relationship是成分间的关系,可以是层次结构,依赖关系
    • principle指的是架构中使用的设计约束,如分层结构、EJB

      领域模型和系统架构是什么关系呢?领域模型应该作为架构设计的重要输入,通常来说,领域模型的粒度较细,不足以作为软件架构的element或者component来解释,但是进一步抽象,领域模型的子领域划分是很好的模块划分方式,领域划分可以直接应用于架构的模块职责划分上。
      除了领域模型,系统架构还需要考虑其他几个重要因素:

    • 前瞻性。前瞻性通常来源于业务发展规划、公司战略方向甚至大到社会发展趋势,领域模型来源于明确的产品设计方案,往往是得不到这些概念性输入的。系统架构设计的前瞻性直接影响到架构的稳定性,如果架构随着业务变化而震荡,那么对技术团队来说就是灾难。
    • 性能和稳定性。非功能性需求往往不会在领域模型里体现,系统的实现中可能需要通过缓存,监控,一致性协议等满足非功能需求。
    • 公用组件的抽取和沉淀。

    7 一些感想

      一切的方法论,都需要基于一些理想化的假设,但是现实世界的复杂注定了没有一套方法论是万能的、完整的。现实世界中,往往是这样的:

    • 产品经理给出的需求描述(用例)永远都不完整,必须要靠持续的沟通和思考来挖掘真实的需求。
    • 不同的人对于领域建模的方法和现实需求的理解各有不同,对未来的前瞻性也不同,这就导致当建模出现分歧时,难以有标准来判断谁是“正确”的。

      因此,领域建模的的确确十分依赖经验,并不同于纯粹的技术,更是个人综合能力的一种体现。

    8 参考资料

    [1] Larman C. Applying UML and patterns[J]. Pearson Schweiz Ag, 2004.
    [2] Martin J, Odell J J. Object-Oriented Methods: A Foundation[J]. Object-oriented methods : a foundation, 1998, 222(2):3–11.
    [3] Fowler M. Analysis Patterns: Reusable Object Models[M]. DBLP, 1997.
    [4] Fowler M. Patterns of enterprise application architecture[M]. 中国电力出版社, 2004.
    [5] Evans. Domain-Driven Design: Tacking Complexity In the Heart of Software[M]. 2004.
    [6] Fairbanks G, Garlan D. Just Enough Software Architecture: A Risk-Driven Approach[J]. Crc Press, 2010.
    [7] Booch G, Maksimchuk R, Engle M, et al. Object-oriented analysis and design with applications, third edition.[M]// Object-oriented analysis and design with applications /. Benjamin/Cummings Pub. Co. 1994:1275-1279.
    [8] https://en.wikipedia.org/wiki/Object-oriented_analysis_and_design
    [9] Moreno A M. Object-Oriented Analysis from Textual Specifications[C]// of 9 Th International Conference on Software Engineering and Knowledge Engineering. 1997:157.
    [10] Coad P, Deluca J, Lefebvre E. Java Modeling in Color with UML[J]. 1999.
    [11] 运用四色建模法进行领域分析
    [12] Systems and software engineering — Architecture description
    [13] 还有很多思想参考自阿里内网的一些文章,不便贴出:)

    展开全文
  • 领域建模(见侧边栏)作为一项强大的技术,常备于很多IT专业人士的工具箱之中。令人遗憾的是,在过去的几年间,因为领域建模的几个问题导致人们对其大失所望,尤其是在敏捷领域。这种方式的两个切实存在的问题就是:...
  • 北邮软件工程分布式系统中需求定义,领域建模,用例建模等相关文档,写的不一定非常符合您的心意,仅提供参考。
  • 对于具备三、五年开发经验的同学而言,可能会接触到领域建模。如果公司规模较大,可能会更早接触这一概念。但是,领域建模好像一座高山,很难越过。目前,业界提出了很多方法建模,但没有一种被公认是最好的方法,大...
  • 面向领域建模

    2007-06-19 16:23:37
    面向领域建模 DDD,精彩好书 !
  • 领域建模的一点思考

    2018-12-21 17:32:08
    且不谈各种专业的概念,不谈各种复杂的流程图,我理解领域建模更多地是一种指导思想,或者说一种做事方式。 谈谈我理解领域建模的两个核心点: 一、何为“领域建模”  建模绝对不是一个新概念,传统软件设计,...

    最近听了一个相关的讲座,有一点感触和思考记录下。且不谈各种专业的概念,不谈各种复杂的流程图,我理解领域建模更多地是一种指导思想,或者说一种做事方式。

    谈谈我理解领域建模的两个核心点:

    一、何为“领域建模”

        建模绝对不是一个新概念,传统软件设计,我们也会建模,常见地,设计db表结构或者ER图就是建模的一种(存储建模)。
    而领域建模这几年之所以很火的原因是:随着业务系统复杂性的提高,需要更加科学和系统的建模方法,来增强对事物本质的理解以及帮助使用更加合理的系统来实现和支撑业务。

        领域建模和存储建模(ER图)主要有两点区别:1、层次不一样(如下图所示) 2、关注重点不一样。存储建模更多地关注了技术实现,领域建模更加强调从业务视角去理解。领域建模的产出一定是产品、技术、运营都能够理解的业务概念,不带有任何技术术语,是对业务的统一认知。

        领域建模的核心是如何界定领域(domain)和子域(subDomain)。这个依赖于对业务的理解能力和对客观世界的理解流程。讨论及确定领域的过程,非常重要,最好可由产品、运营、技术等各方一起头脑风暴,经过多轮讨论确定。确认后,各方可从领域建模的产出对业务达成一致的认识。——这块是我们以前很可能忽视的一个方面。

        基于业务场景确认好的领域(domain),从长远来看,是公司的一个“资产”,可以重复并且长期使用。反之,如果领域没有划分清楚,特别是一些子域交织不清,长期来看,必然需要重构和优化,这对公司来说,是一个“负债”。

     

    二、统一语言

        领域建模的产出不是摆设,而是各方后续做事的依据。比如,产品运营同学,需要根据这个来考虑业务流程;技术同学需要根据这个来进行代码开发(甚至是类名、实体名)也要保持一致。这样做最大的好处就是:表里如一。即各方对于业务的理解并没有任何不一致,不需要任何“转换”或者“翻译”。

     

    三、小结

    就像“云计算”一样,炒热各种概念其实没有啥意义。领域建模于我们工作而言,我理解更多地是一种指导思想。当然,在实际工作中,需要把这种思想或者思维方式融入到实际的工作中,这样才有意义。至于领域建模如何应用到实践,这个每个人也许有不同的做法,也需要个人去理解。

     

    展开全文
  • 本文来自于作者张建飞,文章主要介绍了如何进行领域建模、领域服务以及模型重构等相关内容。 维护过企业级业务系统的同学,基本上没有一个不抱怨业务代码烂的,过程式的面条代码充斥着屏幕,程序员的心力和体力都...
  • 领域建模验证语言EDOLA研究 Domain-specic modeling and verication language EDOLA Hehua Zhang Phd thesis
  • 非常好和最为全面的DDD领域建模知识总结资料并包含了简单样例代码解读,该资料包含8个部分 1. 什么是DDD? 2. 为什么要使用DDD? 3. DDD核心概念 4. DDD需求分析、设计、开发流程 5. 基于微服务架构构建旅程 6. DDD...
  • 领域建模文档-UML实践

    2009-04-01 22:05:46
    领域建模领域建模文档-UML实践领域建模文档-UML实践
  • jtest domain领域建模工具
  • 领域建模方法论

    2019-09-20 14:24:38
    领域建模实践 根据领域分析结果写一个Demo。 使用充血模型创建领域对象。 实践时需要区分哪些是业务特有数据,哪些是业务公共数据,业务特有数据存放到特定业务领域。 领域服务是原子的,稳定的。领域不关心不同...
  • 换个思维学领域建模方法和实践

    千次阅读 2019-06-08 21:43:58
    引言 对于具备三、五年开发经验的同学而言,可能会接触到领域建模。...本文将分三部分讲解这一概念:为什么领域建模这么难、换个思维学领域建模以及领域建模要回答的三个问题。 二、为什么领域建模这么难...
  • DDD领域建模基本流程

    2020-07-06 08:20:05
    整理一个精简的DDD领域建模基本流程,供大家在DDD领域建模实践中进行参考。 搜集用户故事(用户的原始需求) 整理用户故事,抽出用例(用例表达了用户对系统的需求,定义了系统的边界以及系统外部角色和系统的交互...
  • 领域驱动设计之我见-领域建模

    千次阅读 2018-07-18 22:05:24
    前面两节絮絮叨叨重点讲了一句话:领域驱动设计的核心在领域模型,领域建模核心在精通领域业务。那么该如何做好领域建模呢?需要精通的能力都没有捷径可走,但是也不是没有方法可循,下文就领域业务和建模两方面做...
  • 本文来源阿里云云,文章主要谈了为什么需要领域建模,什么是好的模型,又该如何搭建。软件的世界里没有银弹,是用事务脚本还是领域模型没有对错之分,关键看是否合适。实际上,CQRS就是对事务脚本和领域模型两种模式...
  • 中科院架构师讲义 领域建模,共六讲很详细,值得一看。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 146,422
精华内容 58,568
关键字:

领域建模