`
iamlotus
  • 浏览: 108111 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

DDD思考之一 ubiquitous language

阅读更多

对DDD,之前看过info的mini book,也看过jdon上很多帖子,javaeye上的好像倒不是很多。一直对一些地方想不通,google的结果也是千奇百怪,想想干脆看看Eric Evans原书吧,就去卓越上买了本(本来是在当当下单的,那个物流...不说了)。 应该说Evans这书是真正写给作项目的人看的,很多地方讲的蛮细,读来受益颇深。

今天先说说ubiquitous language

这个ubiquitous language中文好像是翻作“通用语言”,我觉得倒不如google机器翻出的“无处不在的语言”更能表意。一个项目时间长了(>5 year)后,CR越来越多,业务范围越来越广,同于相同的概念,往往会有不同的称呼,而相近的称呼却往往有不同的意思。

比如我们现在作的项目,同样的品相class叫作Item,BA却有人叫SKU,有人叫Item,文档里也是两个名称混杂使用。同样是入库/出库,package叫作gate in/gate out,后来为了照顾美国人的习惯又都改称receiving/shipping,可package name和以前的代码都没有改。于是每个新人进来都要纠结一下。

再比如包装单位,其实有两种意义。一个是箱/包 这样的literal concept,另一个是指某种具体的item可以有箱/包这样的包装单位。前者在代码中叫作uom,后者在代码中叫unit of measue。可BA在文档和平时的表述中往往两者混用,需要developer自己去反应。这样的事对于新的developer来说往往是不方便甚至容易出错的。

ubiquitous language强调的就是开发环节中的各角色对于术语有着相同的认知,长期来讲这样会节省大量的沟通成本。即使不使用DDD,这点也是很有指导意义的。比如上面举的例子,随着需求的变更,更换了术语的表述,那么原来系统中相应的名称就应该rename,而不仅仅是更改UI上的文字。这样能更好的保持系统一致性。

再比如某个模块开发完了后,发现数据库中的column拼错了,把profit拼成了proift,这个错误可能已经蔓延到系统中去(除了ORMapping,可能还会有其它database level query和 SP)。发现这个错误后是不是应该修改呢?我觉得即使有代价还是应该修改。因为对以后的维护者来说,profit是一个不言自明的知识,而proift这样错误的拼写总需要一次次错误教育才能得到,这个代价是相当大的。更何况这样的知识点不可能显示的标注出来(实际上,真在注释中写上这个也只能让阅读者觉得S13)。所以站在系统的角度来说这样的坑一定要填上,相信有接手过别人代码的兄弟一定都能明白这点。

所以ubiquitous language不是对DDD才有意义的概念,它是对以往开发中一些bad practise经过总结得出的。即使对于广大的SSH用户也很有借鉴作用。

当然,也许使用DDD才能够使这种一致性达到更高的程度,这就是另外一个话题了。

0
0
分享到:
评论

相关推荐

    领域驱动设计

    领域通用语言(Ubiquitous Language)是DDD的关键实践之一,它是一种由领域专家和开发人员共同理解的语言,消除沟通障碍。通过使用基于模型的语言,所有参与者都可以在同一语境下讨论业务问题和解决方案,避免了术语...

    2-DDD的庖丁解牛之道(V1.5)——王立.pdf

    DDD通过引入统一语言(Ubiquitous Language),确保团队成员在同一个认知层面上沟通,从而避免歧义。统一语言是指在团队内部使用的,能够精确表达领域模型概念和业务规则的语言。这种语言能够被所有相关人员理解和...

    领域驱动设计_DDD培训教材

    Ubiquitous Language是DDD的核心概念之一,它是一种在业务专家、产品经理和开发人员之间共享的语言,避免了因为术语歧义导致的理解误差。每个领域或Bounded Context都有自己的通用语言,相同的术语在不同的域中可能...

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

    1. ** Ubiquitous Language**:领域和开发团队共享的术语,用于明确沟通和减少误解。 2. **Context Mapping**:定义领域之间的关系,如协作、共享Kernel、子域独立等。 3. **Aggregates**:业务规则的边界,保持内部...

    单纯的DDD代码

    **领域驱动设计(Domain-Driven Design,简称DDD)**是一种软件开发方法,它强调以业务领域为中心进行系统设计,将复杂的业务逻辑转化为清晰的模型。DDD的核心思想是将业务领域专家(Domain Experts)的知识转化为...

    领域驱动设计中国峰会DDD-China2019

    领域驱动设计峰会(DDD Conference)是由国内领域驱动设计(DDD)思想和实践的领军者——ThoughtWorks的架构咨询师们组织发起,希望为国内的领域驱动设计(DDD) 实践者们提供了一个互相交流、分享自己团队的成功...

    DDD分层架构的三种模式.

    UL(Ubiquitous Language,通用语言)是团队共享的语言,是 DDD 中最具威力的特性之一。不管你在团队中的角色如何,只要你是团队的一员,你都将使用 UL。 UL 和 BC 同时构成了 DDD 的两大支柱,并且它们是相辅相成...

    ddd 培训ppt文档

    而DDD提倡的是分析和设计的统一,通过建立无处不在的语言(Ubiquitous Language),确保所有人都能使用相同的术语进行沟通,减少误解,提高开发效率。 领域模型的重要性在于,它能帮助团队更好地理解和表达复杂的...

    DDD领域驱动设计day01.pdf

    2. **统一语言**(Ubiquitous Language):团队成员,包括业务专家和开发者,共同使用的语言,确保大家对业务概念有共同的理解,避免沟通中的误解。 3. **事件风暴法**(Event Storming):这是一种集体协作的方式...

    DDD2019领域驱动设计大会PPT全套

    7. **边界上下文**:定义了特定领域模型的边界,每个上下文都有自己的语言( Ubiquitous Language)。 8. **上下文映射**:描述不同边界上下文之间的关系,如共享kernel、客户-供应商、发布-订阅等。 9. **仓储**...

    ddd实战中的那些坑.zip

    正确识别和定义各个领域的边界,确保每个上下文都有其独特的语言( Ubiquitous Language),能有效避免这种问题。 其次,过度设计也是常犯的错误。DDD强调的是根据业务需求来构建模型,但有时开发者可能会过于热衷...

    DDD领域驱动设计 DCI架构

    而DDD强调分析和设计的融合,通过建立一个无处不在的语言(Ubiquitous Language),确保团队成员对业务的理解一致,从而减少沟通成本,提升开发效率。领域模型是这个统一语言的基础,它应该清晰地反映出业务实体、值...

    000001_DDD领域建模知识分享.pptx

    它强调与业务专家的密切合作,使用通用语言(Ubiquitous Language),建立共享的理解,减少沟通成本,提高软件的可维护性和可扩展性。 **为什么要使用DDD?** 在面对复杂的业务场景和不断变化的需求时,传统的开发...

    DDD Reference 最新版本Eric Evan-领域驱动设计

    7. **战略设计**:包括子域划分、Bounded Context和通用语言(Ubiquitous Language)等,帮助团队理解复杂的业务需求,并确保所有参与者在同一语境下沟通。 8. **战术设计**:涉及实体、值对象、工厂、仓储、领域...

    基于DDD的领域建模中的模版和工具实践(36页).pdf

    3. **通用语言(Ubiquitous Language)**:DDD强调开发团队与业务专家之间使用一致的语言进行沟通,以消除技术术语和业务术语之间的歧义。通用语言应贯穿在整个项目中,包括代码、文档和交流。 4. **战略设计**:...

    领域驱动设计(DDD)

    - **Ubiquitous Language(通用语言)**:团队成员之间使用统一的语言进行沟通,确保所有参与者对业务领域的理解和表述保持一致。 #### 知识点二:推迟基础设施决策的重要性 在《领域驱动设计》这本书中,作者Eric...

    DDD领域驱动设计:软件核心复杂性应对之道

    同时,DDD提倡使用"语言双向工程",即领域专家和开发人员使用统一的语言(Ubiquitous Language)交流,确保模型的准确性和可理解性。 总的来说,《领域驱动设计:软件核心复杂性应对之道》这本书提供了一套系统的...

    DDD 领域驱动设计 领域建模PPT

    每个限界上下文都有自己的语言( Ubiquitous Language),并与其他上下文通过明确的接口进行交互。合理划分限界上下文可以避免模型的混乱,提高系统的可维护性和扩展性。 在实际的设计和开发中,DDD强调的是持续的...

    DDD.pdf领域驱动建模

    4. **通用语言(Ubiquitous Language)**:通用语言是指开发团队和业务专家共同使用的一种语言,用于描述业务领域。通过制定和遵循通用语言,可以减少误解,提高沟通效率。 #### 结论 领域驱动设计不仅仅是一种...

Global site tag (gtag.js) - Google Analytics