让技术人员看得懂的流程(3)——领域模型

简介:

               让技术人员看得懂的流程(3

                            ——领域模型

按照一般的项目管理过程,“需求”之后是“分析”,那么在分析阶段对应的技术流程又是哪个?如何将需求阶段和分析阶段联系起来呢?答案就是“领域模型”

什么是“领域模型”呢?只要抓住“领域(Domain)”二字就可以理解,也就是说领域模型是帮助我们理解相关领域知识的模型。

进一步来问:为什么需要领域模型?前面不是有“用例模型”吗,看起来用例模型好像就是描述相关领域知识的,是否完成用例模型就可以进行设计了?

如果你曾经写过用例文档,或者仔细看过用例文档,那么你肯定知道“用例”本身和“面向对象”、“类”这些都没有关系,用例就是纯自然的语言(比如英语、汉语)写的,因为用例实际上由客户口述给我们、然后由我们形成文档化的用例文档,客户才不管我们是什么面向对象还是面向过程还是阿猫阿狗的。

因此,单纯从用例来看,是没有类的概念的,无法完成从自然语言到面向对象语言的转换。但是,既然我们已经完成了用例模型,那么就必须基于用例模型进行分析(否则用例模型岂不是白做了),而“领域模型”就是自然语言向面向对象语言的一座桥梁。

让我们来看看“领域模型”阶段我们要做什么、该怎么做。其实很简单,简单概括就是“找名词”,分为四个步骤:(1)找出用例模型中的名词,(2)然后识别这些名词本身的相关信息,(3)以及名词之间的相互关联关系,(4)用UML画出领域模型。

我们来看在“用例模型”章节中的POST用例如何得出领域模型。

第一步:找出用例模型中的名词

原有用例如下,用蓝色加黑标出名词(重复的就不标了):

1顾客携带商品收银台

2收银员扫描商品条形码

3系统根据条形码获取并显示商品信息

4)收银员重复2~3步,直到所有商品扫描完毕;

5)系统计算商品总额

。。。。。。。。。。。。。。。。。。。。

n)系统打出商品清单,完成交易

这个用例中的名词有“顾客”、“商品”、“收银台”、“收银员”、“商品条形码”、“系统”、“商品信息”、“商品总额”、“商品清单”、“交易”。稍加整理:

1)“顾客”、“收银员”是系统的外部对象,不需要我们进行设计,但这些对象要和系统进行交互;

2)“商品”、“商品条形码”、“商品信息”、“商品总额”、“商品清单”、“交易”是领域对象,但“商品条形码”、“商品信息”可以算作“商品”的属性、“商品总额”可以算作“交易”的属性,最后从这个用例总结出来的领域对象有“商品”、“商品清单”、“交易”三个。

第二步:识别这些名词本身的相关信息

一个对象的属性可能分布在多个用例中,因此可以通过迭代不断的完善一个对象的属性,大家可以看到,我们在第一步中的样例就已经分析了一部分了:“商品条形码”、“商品信息”可以算作“商品”的属性。

对象除了属性外,还有一些约束或者限制,这些在用例中可能有,也可能没有,这就需要分析人员来发现了。比如说交易金额必须大于0.1元小于99999元这种约束,用例中不一定会体现,可能需要分析人员向客户咨询。

第三步:识别对象间的关系

面向对象设计就是依靠对象间的互相协作来配合完成相应的功能,因此识别出对象和对象本身的属性外,还要识别对象间的关系,例如1对多、11、依赖等,详细的各种关系可以参考UML的标准定义。

我们以第一步识别的三个对象为例:“商品清单”包含多个“商品”、一次“交易”对应一个“商品清单”、一个“商品”只能属于一个“交易”等。

第四步:画出领域模型UML

UML这里就不啰嗦了,我们结合前三步的分析,画出这个样例的UML领域模型图:

 

 (由于CSDN关闭了图片上传功能,因此无法贴出,大家可以根据前三步自己画一个)

大家可以看到,经过“领域模型”的分析后,已经完成了自然语言到面向对象语言的初步转化了,领域对象已经识别出来,面向对象已经初具雏形。

需要提醒的是:领域模型过程中识别出来的对象和具体的语言无关,也没有方法。换句话说,publicprivate、函数这些面向对象的属性在领域模型阶段不需要分析出来。

相关文章
|
数据可视化 前端开发 Java
简单使用Swagger
Swagger是一个用于生成、描述和可视化RESTful服务的框架,简化前后端分离开发,自动化接口文档生成,支持功能测试。Springfox是Spring中的Swagger实现。Knife4j是Java MVC的Swagger增强工具,提供更便捷的Api文档生成。使用步骤包括添加依赖、配置Docket、设置静态资源映射。常用注解如`@Api`, `@ApiOperation`, `@ApiModel`, `@ApiModelProperty`用于美化接口文档。虽然Swagger可生成接口文档,但它与设计阶段工具如Yapi互补,分别适用于开发和设计阶段。
274 3
简单使用Swagger
|
领域建模 数据库 数据安全/隐私保护
DailyMart03:如何基于DDD设计商城的领域模型?
DailyMart03:如何基于DDD设计商城的领域模型?
1407 0
|
存储 监控 关系型数据库
MySQL 参数innodb_read_io_threads
`innodb_read_io_threads` 是 MySQL 数据库中 InnoDB 存储引擎的一个配置参数,它用于指定后台线程池中用于处理读取 I/O 请求的线程数量。InnoDB 存储引擎负责管理数据库的物理存储和检索,是 MySQL 最常用的存储引擎之一。 ### 参数说明 - **名称**: `innodb_read_io_threads` - **默认值**: 4 - **范围**: 1 到 64 - **动态修改**: 不能动态修改(需要重启服务器) - **适用版本**: MySQL 5.6 及以上版本 ### 作用 `innodb_read_io_threads`
1175 1
|
11月前
|
存储 设计模式 数据可视化
DDD新手入门:领域模型设计的七个核心概念
小米,29岁程序员,分享领域模型落地知识。文章解析领域、子域、限界上下文、领域对象、聚合、工厂与仓库等概念,助你理解领域驱动设计。
541 1
|
JavaScript
Vue3标签(Tag)
这是一个Vue组件`Tag.vue`,提供了多样化的标签展示功能。支持设置标签颜色、尺寸、图标、边框等样式,并可实现标签的动态添加与删除。
212 2
Vue3标签(Tag)
|
存储 Java 数据库连接
MyBatis的类型处理器TypeHandler与自定义实现
MyBatis的类型处理器TypeHandler与自定义实现
1303 0
|
Oracle 安全 关系型数据库
ERP系统的云计算与SaaS模式:实现高效灵活的企业管理
【7月更文挑战第29天】 ERP系统的云计算与SaaS模式:实现高效灵活的企业管理
622 4
|
消息中间件 Kafka 程序员
彻底搞懂Kafka生产消费流程,这篇文章就够了!
```markdown 🚀 Kafka 生产消费流程揭秘:Producer 创建守护线程Sender,消息经拦截器→序列化器→分区器→缓冲区。批量发送基于batch.size或linger.ms条件。acks参数控制可靠性,从0(最快但不可靠)到all(最可靠)。消息重试和元数据返回确保不丢失。关注“软件求生”公众号,探索更多技术! ```
529 1
|
前端开发 数据挖掘
字节面试:领域、子域、核心域、通用域和支撑域怎么划分?
领域驱动设计(DDD)通过划分业务领域和子域简化复杂性。领域是业务问题的范围,子域是更小的专业部分。核心域代表业务的核心竞争力,如电商中的商品、订单和支付;通用域提供跨领域服务,如用户管理;支撑域支持核心功能,如物流、客服和数据分析。这种划分帮助团队专注关键业务,提高开发效率和软件对业务需求的契合度。
761 0
|
IDE Cloud Native 小程序
IDEA 中 30 秒生成 Spring Cloud Alibaba 工程
近日,阿里巴巴发布了 Spring 的国内脚手架定制版 Aliyun Java Initializer,因为全中文界面和流畅速度,被广大开发者热传。Spring 脚手架为开发者提供了丰富的可选组件,并且可以选择多种打包方式,大大方便了开发人员的使用。
16663 0
IDEA 中 30 秒生成 Spring Cloud Alibaba 工程

热门文章

最新文章