温 昱(节选自《软件架构设计》一书的第12章)
分析的另一种重要产品是领域模型,其目标是使负责该系统基本行为的所有核心类可视。
——Grady Booch,《面向对象项目的解决方案》
领域建模是建立领域模型的过程。领域建模专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。接下来,我们来介绍一下什么是领域模型、以及常用于表达领域模型的UML图(从而带来实感)。
12.1.1 什么是领域模型
案例先行。图12-1展示了银行领域模型的一小部分。
图12-1 银行领域模型的凭证相关部分
这是一幅UML类图,它抽象地表示了银行领域中和凭证相关的部分领域知识:
l 任何一个银行“账户”(这里没有详细分类)可能与多个“凭证”相关;
l 具体而言,凭证可以是银行卡、存折、存单等形式;
l 任何凭证都有明确的生效起始日和终止日;
l 但各种凭证的凭证号却不是统一的,比如存折和信用卡有不同的编号格式;
l ……
模型虽小,却涵盖了银行一些实际的业务情况。由此例可以看出:领域模型是对实际问题领域的抽象表示,它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。
Grady Booch在《面向对象项目的解决方案》中说明了“关于一般领域模型规模的经验性法则”,这一法则无疑为我们提供了更多领域模型的实感:
对于中等复杂度的项目,应该在系统的领域模型中找到大约50~100个类,它们只代表定义问题空间词汇的那些关键抽象。
12.1.2 领域模型相关的UML图
一般情况下,领域模型用下面两种UML图表示:
· 类图
· 状态图
类图无疑用得是最多的,但有时状态图可以用来对业务领域对象的状态变化进行有效的补充说明。仅举一例。图12-2描述了储蓄账户的可能状态及状态转换关系。
图12-2 储蓄账户的可能状态及状态转换关系
该状态转换图作为银行领域模型的一部分,表达了如下业务知识:
l 储蓄账户有正常、挂失、冻结、销户等4种状态;
l 有效的储蓄账户始于开户交易,开户交易成功后储蓄账户处于正常状态;
l 开户交易的业务规则是:开户金额≥10元人民币;
l 用户可以凭身份证要求对自己的储蓄账户进行挂失和解挂交易;
l 银行可以根据授权(例如司法授权)对储蓄账户进行冻结和解冻;
l 处于正常状态的储蓄账户可以进行存款、取款交易;
l 处于正常状态的储蓄账户经销户交易后变成销户状态。
分享到:
相关推荐
领域模型是一种面向对象的设计方法,它以业务领域的概念为基础,将业务规则和逻辑封装在模型对象中。在领域模型中,每个对象不仅包含数据,还包含了处理这些数据的方法,这样的设计使得模型更具有表达力和自解释性。...
在本文中,我们将深入探讨领域模型的理论基础,以及如何在实际编码中实现领域模型。 领域模型的核心在于理解并表达业务领域内的核心概念。这些概念可以是实体(Entity)、值对象(Value Object)、聚合(Aggregate...
“胖领域模型”指的是包含大量基础设施代码的领域模型。虽然这种方法在某些情况下可能是可行的,但它也带来了一些潜在的问题: - **可维护性**:当领域模型类变得过于庞大时,维护起来会非常困难。 - **耦合度**:...
除了上述理论性的介绍之外,《UML领域模型介绍》还提到了几种不同的图形表示方式,如领域基础图表(Domain-Based Diagrams)、Web刻型(Web Stereotypes)、用户界面图表(User Interface Diagrams)等,这些图表...
DDD的核心理念是将复杂的业务逻辑转化为清晰的领域模型,以此来提高软件的可维护性和可扩展性。下面将详细阐述DDD领域的模型设计方案及其关键概念。 1. **领域模型**:领域模型是DDD的核心,它代表了业务领域的核心...
在本文中,领域模型被视为一种基础工具,用于捕捉和表达应用系统需求的共同特征。 2. 需求获取(Requirement Acquirement):需求获取是在软件工程过程中识别、分析和记录利益相关者对软件系统的需要的过程。好的...
- **接口设计**:定义清晰的接口,使领域模型与基础设施层(如数据库访问、网络通信等)解耦。 - **持续集成与测试**:编写自动化测试,确保领域模型的正确性和稳定性。 总之,领域模型设计的目的是为了更好地理解...
领域语言则是将领域模型转化为可读性强、表达力丰富的语法结构,它可以是形式化的(如XML、JSON等数据格式),也可以是非形式化的(如自然语言描述)。领域语言的设计需要考虑易用性、灵活性和可扩展性,以便于用户...
在考察服务、用例(use case)、功能、行为特点等不同类型的特征及其相互关系的基础上,给出了一种特征模型的具体形式,并结合具体的领域,对其建模过程进行了详细论述.此项研究对于领域建模活动的成功实施具有一定的指导...
#### 软件的根本目标与领域模型的重要性 在现代软件开发过程中,软件的目标始终是为了解决实际业务问题,满足企业的核心需求。为了达到这一目的,建立合适的领域模型至关重要。领域模型不仅帮助我们更好地理解业务...
《大模型基础技术资料集合》 在这个压缩包中,我们主要关注的是“大模型”这一领域的基础知识和技术。大模型,通常指的是那些具有庞大参数量、复杂结构和强大处理能力的人工智能模型,如预训练语言模型GPT、BERT等...
核心领域模型不仅是业务逻辑的集中体现,也是后续开发工作的基础。 #### 核心领域模型的识别与构建 1. **细分业务领域**:首先需要对整个业务范围进行细分,将复杂的业务场景划分为若干个较小且更易于管理的子领域...
这些构造块是设计和实现领域模型的基本元素,通过它们可以构建一个逻辑清晰、结构层次分明的领域模型。 领域驱动设计的编程实践强调了面向对象分析与设计技术的重要性,它对技术框架进行分层规划,如用户界面/展现...
图模型是一种强大的统计建模工具,它通过图形方式表示变量之间的条件依赖...通过学习“图模型基础”,你将能够熟练掌握图模型的基本理论,具备运用图模型解决实际问题的能力,从而在数据挖掘和其他相关领域中游刃有余。
《机器翻译:基础与模型1》是一本深入探讨机器翻译技术的著作,旨在为自然语言处理领域的研究者和实践者提供全面的理论基础和实践指导。全书分为两大部分,第一部分介绍了机器翻译的基本概念和技术,第二部分则专注...
总的来说,"32个算法(算法/数学模型基础)"是一个全面的入门资源,结合MATLAB编程,可以帮助初学者建立扎实的算法基础,理解和应用数学模型,从而在IT领域特别是数据分析和机器学习方向上打下坚实的基础。
《王树禾 数学模型基础》是一本深入浅出地介绍数学模型基础知识的教材或教程。作者王树禾,可能是该领域的专家或教育者,旨在帮助读者理解和掌握数学模型的基本概念、方法和应用。数学模型是用数学语言描述现实世界...
1. DDD Object Model:这是基础的对象模型,用于描述领域模型中的实体和它们之间的关系,定义了支持的DDD建模类型。 2. Model Xml Document:以XML格式存储模型信息,包括显示设置、实体类型和关系结构,便于序列化...