`

让领域模型发挥作用

 
阅读更多

模型是一种简化。他是对现实世界的一种解释,并把与解决问题密切相关的方面抽象出来,而忽略无关的细节。

每个软件程序的目的都是为了执行某项活动,或是满足用户的某种需求。用户会把软件程序应用于某个主题区域,这个区域就是软件的领域。模型是用于解决信息超载问题的工具。模型是一种只是形式,他对知识进行有选择的简化和有目的的结构化。

 

领域模型并非一种特殊的图,特使图要表达的思想。他是经过严格组织并且精心选择的抽象知识。

建立领域模型并不是要尽可能建立一个符合现实的模型。它不单单是一种为了实现某种目的而构造出来的软件机制。建模更像是制作电影处于某种目的而概括的反应现实。

 

模型在领域驱动中的作用。

(1)模型和设计的核心相互影响。

(2)模型是团队所有成员使用的交流语言的中枢。

(3)模型是浓缩的知识。

软件的核心是其为用户解决领域相关的问题的能力。所有其他特性,不管多么重要,都要服务于这个基本目的。当领域很复杂是,这是一项艰巨的任务,要求高水平技术人员的共同努力。然而在大多数软件项目中,这些问题并未引起足够的重视。大部分有才能的开发人员对学习与他们的工作领域有关的事实不感兴趣,更不会下力气去扩展自己的领域建模技巧。技术人员喜欢那些能够练习技巧的可量化问题。领域工作很复杂,而且要求掌握很多复杂的新知识,而这些新知识看是对提高计算机科学家的能力并无裨益。

 

有效建模的要素

1.模型和现实的绑定。

2.获得了一种基于模型的语言。

3.开发一个蕴含丰富知识的模型。

4.提炼模型。

5.头脑风暴和实验。

 

知识消化

 

高效的领域建模人员是知识的消化者。他们在大量信息中探寻有用的部分。知识消化并非一项孤立的活动,他一般是在开发人的领导下,有开发人员与领域专家组成的团队来共同协作。

有些项目使用了迭代过程,但由于没有对知识进行抽象而无法建立起知识体系。好的程序员会自然而然地抽象并开发出一个可以完成更多工作的模型。在团队所有成员一起消化理解模型的过程中,他们之间的交互也会发生变化。领域模型的不断精化迫使开发人员学习重要的业务原理,而不是机械地进行功能的开发。

模型在不断改进的同时,也成为组织信息流的工具。

 

持续学习

 

当开始编写软件时,其实我们所知甚少。项目知识零散地分散很多人和文档中,其中夹杂一些无关信息,因此我们甚至不知道那些之似乎是真正需要的知识。同时,所有项目都会都是知识。已经学到了一些知识的人可能干别的事去了。团队可能由于重组而被拆散,这导致只是又重新散开。高效率的团队需要有意识的积累知识,并持续学习。对于开发人员来说这意味着纪要完善技术知,也好培养一般的领域建模技巧。

知识丰富的设计

我们从一个非常简单的领域模型还是学习,基于此模型的应用程序用来预定一艘船再一次航程中要运载的货物。由于总会有人临时取消订单,一次航运业的一般做法是接受比其他运载能力多一些的货物。这称为超定。

需求文档中包含下面这段话:允许10%的超订。

现在类图和代码应该像如下:


 

public int makeBooking(Cargo cargo, Voyage voyage) {
    double maxBooking = voyage.capacity() * 1.1;
    if((voyage.bokedCargoSize() + cargo.size()) > maxBooking)
        return -1;
    int confirmation = orderConfirmationSqquence.next();
    voyage.addCargo(cargo, confimation);
    return confirmation;
}

现在一条重要的规则被隐藏掉了,现在我们主要考虑如何把这条规则更清楚的表达出来,以便让项目中的每个人都能看到他。

 

我们可以改变一下设计来更好地捕获这个知识。超定规则是一个政策(policy)其实是一种设计模式,也就是我们所说的strategy策略模式。使用strategy的动机一般是为了替换不同的规则,虽然在这里并不需要这么做,但我们要获取的概念确实符合strategy的意义。

修改后的代码如下

public int makeBooking(Cargo cargo, Voyage voyage) {
    if( !overbookingpolicy.isallowed(cargo, voyage) )
        return -1;
    int confirmation = orderConfirmationSqquence.next();
    voyage.addCargo(cargo, confimation);
    return confirmation;
}

新的OverBookingPolicy类包含以下方法:

 

public boolean isAllowed ( Cargo cargo, Voyage voyage ) {
    return (cargo.size() * voyage.bookedCargoSize()) <= 
        ( voyage.capacity() * 1.1 );
}

  现在所有人都可以看出超定是一个独特的政策,而且超定规则的实现是明确独立的。我们不建议将这样精细得设计应用到领域的每个细节中。

这个例子的目的是说明领域模型和相应的设计可用来保护和共享知识。更明确的设计具有

1.为了实现更明确的设计,程序员和其他各位相关人员都必须理解超定本质,明白它是一个明确且重要的业务规则。

2.程序员可以向业务专家展示技术工件,甚至是代码,但是应该是领域专家可以理解的,以便形成反序循环。

 

深层模型

 

有用的模型很少停留在表面层次上。随着对领域和应用程序需求的理解逐步加深,我们往往会丢掉那些最初开起来很主要的表面元素,或者切换他们的角度。这时,一些在开始时不可能发现巧妙抽象回渐渐浮出水面,而他们恰恰切中问题的要害。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 4.3 KB
  • 大小: 9.1 KB
分享到:
评论

相关推荐

    领域驱动设计第二分卷

    第ⅰ部分 让领域模型发挥作用. 第1章 消化知识 5 1.1 有效建模的因素 9 1.2 知识消化 10 1.3 持续学习 11 1.4 知识丰富的设计 12 1.5 深层模型 15 第2章 交流及语言的使用 17 2.1 通用语言 17 2.2 利用对话...

    领域驱动设计第一分卷

    第ⅰ部分 让领域模型发挥作用. 第1章 消化知识 5 1.1 有效建模的因素 9 1.2 知识消化 10 1.3 持续学习 11 1.4 知识丰富的设计 12 1.5 深层模型 15 第2章 交流及语言的使用 17 2.1 通用语言 17 2.2 利用对话...

    领域模型驱动设计1553265830.pdf

    领域模型是领域驱动设计的核心概念,它代表了业务领域的概念和规则的抽象。设计一个好的领域模型是理解复杂业务逻辑的关键。领域模型分为贫血模型和充血模型两种。 - 贫血模型指的是领域对象只包含了数据访问方法...

    通用大模型与垂直大模型详细介绍

    ### 通用大模型与垂直大模型详细介绍 #### 引言 随着人工智能技术的飞速发展,...综上所述,通用大模型和垂直大模型各具特色,它们不仅在当前的人工智能领域发挥着重要作用,而且在未来也将继续引领技术的发展方向。

    tbl-demo-service-master.zip

    领域模型的职责是实现业务逻辑,如果领域模型只是用来处理简单的逻辑(比如贫血模型),那么领域模型的作用微乎其微,甚至可以忽略,数据转换的成本比领域模型带来的好处还多,这种情况其实就是在原有的分层架构中...

    AI大模型 什么是大模型 应用领域

    当前,大模型已经成为人工智能领域的基础模型,被称为Foundation Models,它们在智能体的基本认知能力提升上发挥了关键作用。然而,大模型也存在“涌现”和“同质化”现象。“涌现”意味着模型的行为不是由明确的...

    流域水文模型教材-新安江模型与陕北模型

    这种技术在解决水文实际问题和进行水文规律研究方面都发挥着重要作用。 1. 概念性模型与确定性模型 流域水文模型主要分为确定性模型和概念性模型。确定性模型,也称为“黑箱模型”,主要通过输入数据和模型的输出...

    通用大模型与垂直大模型介绍

    总之,通用大模型与垂直大模型作为人工智能领域的两大重要组成部分,将在未来的科研和技术实践中发挥着越来越重要的作用。通过对它们的理解与应用,我们可以预见一个更加智能、高效和人性化的未来社会。

    拓者1000套模型

    首先,模型在各个设计领域中发挥的作用不容忽视。对于建筑设计师来说,一个精确的三维模型可以帮助他们更好地展示设计理念,协助业主和施工团队理解建筑的空间布局和构造。在产品设计中,模型不仅可以帮助设计师测试...

    从领域建模到模型驱动--j建模理论进展

    - **定义领域模型**:根据业务需求定义领域模型,包括数据结构、业务逻辑和规则。 - **模型验证**:确保模型的正确性和完整性,可以通过形式化方法进行验证。 - **模型转换**:将领域模型转换为具体的实现细节,如...

    水箱模型_水箱模型_水箱模型参数_

    通过对模型参数的优化,我们可以获得更贴近实际的水文过程模拟结果,从而在水资源管理、灾害预防等方面发挥重要作用。在实际操作中,需要根据具体问题和数据情况选择合适的参数率定方法,并结合专业知识和经验进行...

    人工智能航天领域应用参考模型.pdf

    在航天领域中,人工智能技术的应用已经成为推动航天技术发展的关键因素。本文档详细分析了人工智能在...通过这些知识点,我们可以更好地理解人工智能如何在航天领域发挥作用,以及它对于整个航天技术进步的推动作用。

    大模型-AI大模型总体概述.pdf

    人工智能领域自诞生以来,其发展速度迅猛异常,尤其是近年来,AI大模型的应用...未来,随着技术的进一步发展和优化,AI大模型有望在更多领域发挥关键作用,推动人工智能技术向前迈进,为人类社会带来更多便捷和进步。

    常用的常微分方程模型,涉及多个领域

    常微分方程(Ordinary Differential Equations, O...通过这些模型和程序,你可以深入理解常微分方程如何在不同领域中发挥作用,并实践解决实际问题。学习和掌握这些内容,将有助于提升你在科学计算和工程应用中的能力。

    2023AI大模型市场研究报告,迈向通用人工智能,大模型拉开新时代序幕

    《2023AI大模型市场研究报告:迈向通用人工智能,大模型引领新...未来,随着技术的不断迭代和应用场景的拓宽,大模型将在更多领域发挥关键作用,推动人工智能进入一个全新的发展阶段,为人类社会带来前所未有的变革。

    PetroGPT石油领域大语言模型

    尤其在石油领域,PetroGPT这一专为石油行业定制的大语言模型,更是发挥了重要作用。本文将深入探讨PetroGPT的特性和应用,以便于读者全面理解这一技术在石油行业的价值。 PetroGPT,顾名思义,是基于GPT...

    大型语言模型在医疗领域的应用

    随着技术的进步,LLMs不仅在一般语言理解上取得突破,还在特定领域的应用中发挥着重要作用,尤其是在医疗健康领域。 #### 三、医疗领域中的应用 ##### 1. 诊断支持 大型语言模型在医疗诊断方面的应用主要体现在...

    大型语言模型在教育领域的机遇与挑战.pdf

    【大型语言模型在教育领域的应用】 随着技术的飞速发展,大型语言模型如ChatGPT已经在自然语言处理领域取得了重大突破。...未来,大型语言模型将在教育领域的更多方面发挥作用,塑造更加智能和个性化的学习环境。

    CV_CV模型_

    【标题】: Chan-Vese模型在图像分割中的应用 【描述】: Chan-Vese(CV)模型是图像分割领域中的一个重要...通过对图像的自动分割,该模型能够帮助我们从复杂背景中提取出感兴趣的目标,从而在多个领域中发挥重要作用。

    遵循CWM的元模型设计及元模型管理的设计

    此外,元模型管理的设计必须考虑到系统的落地,即如何将元模型管理的理论和规范应用于实际的IT系统架构中,使其在实践中发挥作用。 可扩展性是元模型管理中的一个重要考量点。良好的元模型管理系统应当能够适应变化...

Global site tag (gtag.js) - Google Analytics