`
louis0001
  • 浏览: 3858 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

软件开发过程之构建领域模型泛谈

 
阅读更多

 

   领域驱动设计的话题已经被讨论了许多年了,拿出来讨论建模方式,多少有种炒冷饭的嫌疑。但是在实际的应用中,我们为了实现业务软件的可伸缩性和分层维护,或者在业务实现的过程中,通过迭代不断的深入理解业务需求,个中技巧往往又都是DDD最迷人的特性。
第一部分 领域建模
    在一个软件开发周期中,为了更好的管理软件开发过程,时下最流行的方式莫过于沿用SCRUM敏捷框架。敏捷的短周期持续化交付往往是业内大多数开发经理人口中深入理解和控制需求的法宝。人们之所以选择敏捷开发,主要原因就是我们的需求提供者和开发人员在理解自己需要实现的东西上,往往都存在着很模糊的认识,项目的参与者心知肚明,但碍于大家在语意沟通上存在着业务鸿沟,我们无法在初期就能准确的得到需求模型。因此,敏捷开发就像是作画一样,先画出一个大的轮廓,然后画出一部分,给客户看一部分,尽早发现错误尽早修正,这样在时间和精确程度上往往能够达到事半功倍的效果。
   OK,这样想非常好!然而在这段描述中我们可以注意到,需求准确性是那么重要,但是却要涉及到开发过程中才可以得到确认并修正,这不是给我们的开发人员增加了额外的工作负担?虽然这样的事情在所难免,然而这样的事情依然会导致项目的时间风险和经费上的浪费,并且我相信没有程序员会愿意为此买单。因此,我们的领域专家Eric Evens整理并提出了领域建模的想法。这个想法的好处就是在迭代开发之前,先来和业务专家们勾描我们将要设计的业务模型是个什么样子,通过沟通而非实现,使业务专家们认识到他们的软件将实现出一个什么样的需求来,需求上的错误认知发现的越早,我们项目的损失也就越小。那么问题来了,我们如何与业务专家沟通呢?
第二部分 统一建模语言
     在业务专家眼中,往往业务描述都是从一个业务操作人员角度开始,通过不断的操作动作,最终实现了一个或多个客户可以满意的结果。这样的过程他们有行业上固定的用语,甚至是公司内部的描述语言。而这对于开发人员来说,这些用于无异于二战时期的密文电码,反之,业务专家眼中技术人员的描述亦然。因此,想要很好的沟通,我们只有知道如何翻译它,才可以理解它。统一建模语言的方式,就是要在两种术语之间架起一个翻译的字典,抓住关键的语句和动作词汇,把它们放在字典中,然后双方把对它们的认知统一起来,OK,这下大家说什么也就没有障碍了,沟通可以继续了。
      那么以后再有不懂的词汇呢?继续放在字典中,不断的丰富它们就好。
 第三部分  建立模型
     当我们把这本字典整理好后,下一步就该谈到如何用了。
     首先,我们需要将这些领域词汇提取出来,写在白板上,然后请业务专家告诉我们,这些词汇之间的关系。例如:“客户”与“产品”,“票据”与“帐套”,“借款”与“贷款”等等;他们一边说,我们一边用类图之类的关联关系将这些对象连接起来。
     然后当关系都建立完成后,再一一的复述给业务人员听,确保他们认可;之后双方通过不断的沟通理解,很快业务模型就可以被梳理出来。然后,我们就可以骄傲的告诉他们,我们的程序设计就是如此进行。
 第四部分  模型实现
     光有模型图对于我们软件开发来说还远远不够,我们的设计师们还要将他们转换为实际的业务对象进行编码,那么如何转换呢?在领域模型中,我们有一些基础的模型元素,他们分别为:entry(实体)、ValueObject(值对象)和Service(服务);他们的颗粒细度依次是:VO<Entry<Service;
     1、VO:作为模型中的属性值的存在;
     2、Entry:作为模型中真实业务主体(有唯一标识且可追溯、有生命周期);
     3、Service:模型中主体与外界业务发生的动作;
     领域模型通过以上三种基本元素丰富起来。
 第五部分 模型的生命周期
     模型为表达业务,其生命周期主要是围绕Entry(实体)存在。实体的生命周期包括创建、引用、脱离和销毁;实体本身根据业务编排需要,既会被引用,也会引用其它业务实体;而围绕它自身的属性和动作则分别有VO和Serive对象来负责;这样的一个功能群被有意的聚合在一起,在Eric的书中给了一个定义,称之为“aggregate”,aggregate有唯一的stub(根),还有用来约束自身行为的bound(边界);集合的根是外围调用唯一访问集合的点,它本身就是一个Entry,而这个Entry的ID应该在集合的内外都应该是唯一的。
     并且,当这个stub被销毁时,这个集合也应该一并被销毁;其模型上的数据也应该被事务提交到持久化层中去。
结尾
      至此,我们的业务模型基本算是完成,剩下的事情就是不断的完善和修订这个模型,而程序也会在模型完善过程中不断的被改善。并且,由于领域模型中,业务实体是高度集合化的,因此符合高内聚、低耦合特点,因此可以用模块化将其服务打包,便于整体项目的伸缩性和可维护性。

参考:Eric Evans的《领域驱动设计 --软件核心复杂性应对之道
分享到:
评论

相关推荐

    使用领域模型构建UML类模型

    领域模型是软件开发中的一种重要技术,它能够捕获系统语境中最重要的对象类型,使用户、客户、开发人员和其他项目相关人员能够更好地理解系统。领域模型可以为开发人员提供重要的信息,但以前领域建模的主要目的是...

    领域驱动模型(DDD).zip_ddd_领域模型_领域驱动_领域驱动设计

    "领域驱动"是指在整个软件开发过程中,以业务领域的核心概念和规则作为驱动因素,优先考虑业务逻辑的设计和实现,然后再考虑技术实现。这种方式有助于确保软件功能与业务需求的紧密对应,避免了技术解决方案与业务...

    软件开发过程与模型ppt资料

    【软件开发过程与模型】 软件开发过程是将需求转化为可运行软件的一系列步骤,它涉及到项目的各个阶段,包括但不限于需求分析、设计、编码、测试和维护。软件开发不仅仅是技术活动,更是一个涉及到管理、沟通和协作...

    软件工程软件开发各模型详解

    在软件工程领域,软件开发模型是指导项目团队按照一定顺序和结构进行软件开发的方法论。这些模型定义了软件生命周期中的各个阶段以及它们之间的关系,帮助团队有效地管理风险、提高产品质量和开发效率。以下是对几种...

    领域模型项目示例

    在IT行业中,领域模型(Domain Model)是一种重要的软件设计概念,尤其在企业级应用开发中占据核心地位。领域模型是对业务领域的抽象和简化,它包含了业务规则、业务实体以及它们之间的关系。本项目示例旨在提供一个...

    软件工程-构建域模型-PPT.ppt

    在软件开发过程中,构建领域模型是一项至关重要的任务。它不仅帮助开发者更好地理解业务需求,还为后续的设计和编码工作打下了坚实的基础。本文将从软件工程的角度出发,深入探讨构建领域模型的相关知识点,包括领域...

    领域驱动设计与模型驱动开发

    综上所述,领域驱动设计和模型驱动开发是软件开发领域内的重要思想,它们通过强调领域模型的核心作用、清晰的分层架构以及基于模型的开发实践,帮助软件开发团队在面对复杂业务逻辑时能够构建出结构清晰、易于扩展和...

    软件开发模型.zip

    在软件工程领域,软件开发模型是用于指导软件项目开发的一系列结构化框架。这些模型定义了从需求收集到系统维护的各个阶段,以及各阶段之间的关系和工作流程。"软件开发模型.zip"这个压缩包中可能包含了一份详细的...

    统一软件开发过程.pdf

    标题和描述均指向了“统一软件开发过程”,这是一个在IT行业尤其是软件工程领域非常重要的概念。统一软件开发过程(Unified Software Development Process,简称USD或UP)是由Rational Software Corporation提出的一...

    论文研究-基于广义软件框架的开发过程研究.pdf

    广义软件框架开发过程研究是一项涉及软件工程领域的重要研究课题,它主要关注于如何在软件开发生命周期中应用广义框架来改进软件开发过程,提高软件的质量、效率和可维护性。本研究的核心在于广义框架的概念、在软件...

    UML 领域模型介绍

    2. **需求管理**:Enterprise Architect是少数几种能够将需求管理与其他软件开发学科集成在同一核心产品中的UML工具之一。这意味着可以在模型内部定义需求,从而更有效地管理和跟踪需求的变化。 3. **业务建模**:...

    软件工程课程阶段测试题目 软件生命周期中不含哪个阶段、关于瀑布模型说法正确的是、下面关于软件过程模型说法错误的是

    瀑布模型是一种经典的软件开发模型,按照线性顺序执行各个阶段,每个阶段完成后才能进入下一个阶段,并且前一阶段的输出作为后一阶段的输入。这种模型强调严格的阶段划分和文档化。 关于软件过程模型,快速原型模型...

    论文研究-基于软件复用的信息系统开发模型.pdf

    软件复用是信息系统开发领域中的一项重要技术,它指的是在软件开发过程中通过重用已有的软件资源,以提高开发效率、减少成本、缩短开发周期,并提升软件质量和可维护性的过程。软件复用的范围很广,包括代码片段、...

    软件开发过程纵横谈(3)MSF

    在软件开发领域,过程模型是指导项目顺利进行的关键框架。今天我们要聚焦于“软件开发过程纵横谈(3)MSF”,这是一个由微软讲师主导的系列讲座,旨在深入探讨微软解决方案框架(Microsoft Solutions Framework)。该...

    领域模型驱动设计(DDD)之模型提炼

    通过以上步骤,我们可以有效地提炼出核心领域模型,并将其应用于实际的软件开发过程中,从而提高软件的质量和灵活性。模型提炼是领域驱动设计中的关键步骤,它帮助开发者更好地理解业务需求,构建出既简洁又强大的...

    软件工程课件(第二章 软件工程过程模型 )

    在软件开发领域,软件工程过程模型是至关重要的概念,它定义了从需求分析到软件维护等一系列有序的活动。本章主要介绍了软件工程过程模型的基本概念和技术基础,包括多个过程模型和相关技术。 2.1 软件工程的技术...

    第一部分 软件工程与过程(3软件过程模型).ppt

    在软件工程领域,软件过程模型是用来描述软件开发过程的不同方式,它们为开发团队提供了一种结构化的方法,以系统地管理复杂项目的各个阶段。本章主要介绍了六种常见的软件过程模型,分别是瀑布模型、增量模型、螺旋...

    领域特定语言 中文 领域模型

    在《领域特定语言》这份文档中,读者可以期待深入探讨这些主题,了解如何有效地设计和实现DSL,以及如何在实际项目中应用DSL来提升软件开发的效率和质量。通过对领域模型的深入理解和DSL的巧妙运用,开发者可以构建...

Global site tag (gtag.js) - Google Analytics