前面我们讲了如何从业务领域获取知识,创建领域模型,那么建立领域模型应当注意什么呢?
建立领域模型应当注意的问题
1.领域模型不是数据模型,也不是软件对象模型
一个创建领域模型的过程中非常容易犯的错误就是,将领域模型当成了数据模型,或者软件对象模型。领域模型,又称为概念模型、领域对象模型或分析对象模型,是“专用于解释业务领域中重要的‘事物’和产品”[RUP]。领域模型专注于现实世界的对象(概念类)而非软件世界的对象。它不包含任何数据库元素、软件类、系统架构以及有职责的软件对象。日后的分析模型、设计模型以及数据模型,将以领域模型作为参考,但很可能与领域模型存在较大差异。因此在建立领域模型的时候,不要与这些模型混淆了。
过去C/S的年代,需求分析往往画的是数据模型。数据模型,也就是我们常说的E-R模型(实体-关系模型),它是基于关系数据库的一种分析模型,其间包含了大量的数据库元素,如主键、外键、数据依赖等等。领域模型不是数据模型,它不应当包含这些内容。
领域模型与软件对象模型同为类图,从而造成领域模型常常与这类模型产生混淆。领域模型是对现实世界的对象的反映,因此领域模型不应包含诸如工厂类、窗口界面、软件架构之类的软件元素,领域模型也不等同于之后用于设计开发的分析模型和设计模型。
领域模型中的概念类通常都只有相关的主要属性,没有任何的方法或函数(有时候概念类连属性都可以省略,仅仅描述它们之间的关系)。
2.领域模型不是一张图,而是一系列图形
我在前面曾经提到过,一张复杂而凌乱的类图常常使人迷惑,领域模型也是一样的。领域模型应当划分成一个又一个的场景,每个场景一张图,进行领域分析。根据实际需要,这个场景可以大也可以小。如果某个模块涉及的概念不多并且关系清晰,我们可以使用一个较大的场景进行描述;如果某个模块涉及的概念纷繁并且关系复杂,我们可以划分成一些更小的场景分别进行描述。领域模型划分的场景不论粗还是细,宗旨便是让读者阅读时清晰明了。
3.草图还是建模工具,是个问题
建立领域模型,使用草图还是建模工具呢,这是个问题。按照过去RUP的思想,建模都应当使用Rational Rose这样的建模工具,一步一步地建立一个又一个的模型,然而敏捷开发彻底打破了这一思想。Robert Martin在他的著作《敏捷软件开发》中强烈建议使用草图进行建模,然后通过扫描草图形成最终的文档。我对此也进行了许多的尝试,我的建议是,建模的初期最好不要使用建模工具。建模的初期,不可避免的是模型的反复修改。如果使用建模工具则意味着每一次的修改都必须进行大量的维护工作,没有草图来得方便快捷。当模型逐渐趋于定型以后,可以尝试使用建模工具进行建模,使模型的建立显得更加正规,也便于日后的阅读和使用。
对领域模型的深入思考
在建立领域模型中,我们通过与客户的沟通,提取出业务领域的概念类,并归纳出这些概念类之间的相互关系。我们做这些事情为我们的需求分析带来什么益处呢?
1.语言的沟通
在软件项目的需求调研过程中,语言沟通一直是困扰我们的一大难题。业务人员在他们自己的领域中有一套他们自身的语言,运用这套语言,他们相互之间可以灵活自如地沟通;软件技术人员在我们的技术领域有我们的一套语言,运用这套语言,我们也可以轻松愉快地沟通。但是,当业务人员和技术人员坐在一起时,问题就出现了。业务人员和技术人员他们各自说各自的一套语言,各说各的话,相互沟通就存在了巨大地障碍。按照以往的经验,解决这个问题的办法就是,技术人员通过自身的努力去掌握业务语言,用业务语言去沟通;业务人员耐心地去解释业务术语给技术人员听,一步一步地去讲解业务领域的一个个流程。这样的过程是一个艰巨的过程。怎样让这样的过程更加高效呢?也许画几个图,用图形化的展示能更加生动形象,从而提高沟通的效率。
同时,领域模型又是日后的技术人员进行分析设计的基础,因此领域模型所采用的语言必须让技术人员能看得懂。正因为领域模型所起到的重要作用——业务领域与技术实现的沟通介质,领域模型必须采用一种通用语言。同时,领域模型对一些关键的业务术语的解释,以及各个概念类相互关系的描述,也大大降低了沟通的难度。
2.知识的消化
我的一位同事正在设计开发一套财务软件,他告诉我他正在努力学习财务知识,期望把自己打造成一个财务专家,我笑了。如果我们要开发财务软件就要成为财务专家,要开发税务软件就要成为税务专家,要开发企业管理软件就要成为企业管理专家,我们的时间精力不允许我们做的。我们开发一套软件并不一定要成为这个领域的专家,而是通过与专家的沟通,获取与我们要开发的软件相关的,这个领域的知识,这些知识对我们是有用知识。要获取这些有用知识,并不一定成为这个领域的专家才能获取。相反,为了成为这个领域的专家,我们可能不得不获取一些对我们开发软件无用的知识。掌握这些无用的知识,对我们毫无意义而空耗了我们的宝贵时间。现在的问题是,如何准确地获取对我们有用的知识呢?
编写用例模型和领域模型,使我们的精力集中到了我们要开发的软件上来。通过它们,我们把我们的注意力集中到了我们要开发的软件,以及与软件相关的所有流程和概念上了。有了这样一个明确的目标,才能让我们掌握业务领域的知识更加高效快捷。
另一个我们不能忽视的问题就是知识的延续性。当需求分析人员理解并掌握的业务领域的知识以后,其实工作并没有完成,他必须把这些知识传递给那些相关的技术人员。只有技术人员掌握了这些知识以后,才能开发出合格的软件产品。当软件开发结束以后,这个知识还在延续,还要传达给今后的维护人员,甚至再往后的二次开发人员。领域模型的不断积累,就是这种领域知识的不断延续。
3.低表示差异
OOA/D的核心思想就是,软件系统中的所有对象都是有各种职能的、高度内聚的对象,软件功能的实现就是这些对象根据各自的职能相互配合完成的。为了实现这样一个设计思想,低表示差异的概念被提出来了。什么是低表示差异呢?说得更加直白一点儿就是,软件中的对象及其职能,与现实世界中对应的事物及其职能,应保持尽量接近。低表示差异为降低软件设计难度,提高系统可读性,都带来了极大好处。毫无疑问,在需求分析阶段建立领域模型,大大提高了软件设计的低表示差异。
参考文献:
中文名:《领域驱动设计——软件核心复杂性的应对之道》
英文名:Domain-Driven Design: Tackling Complexity in the Heart of Software
作者:Eric Evans
中文名:《敏捷软件开发:原则,模式和实践》
英文名:Agile Software Development: Principles, Patterns, and Practices
作者:Robert Martin
相关文章:
《 谈谈领域模型的那些事儿 之 从业务领域获取知识 》
分享到:
- 2009-10-13 01:35
- 浏览 6280
- 评论(0)
- 论坛回复 / 浏览 (0 / 2221)
- 查看更多
相关推荐
3. 领域模型:领域模型是从业务领域中抽象出来的概念模型,它反映了业务的核心逻辑和实体关系。通过领域驱动设计(DDD),开发者可以更好地理解和表达业务规则,提高代码的可读性和可维护性。 4. 分析模型:分析...
他们在试图将自研发的所谓“算法”落地时,做的事情往往就是:管应用要一份数据集,把分数刷上去,超过某些方法,就算是交付了,却完全不分析问题。 这些刷分的技巧包括但不限于搜参数、堆大模型、搞集成等。但是,...
在数据分析领域,R语言是一种广泛使用的工具,尤其在统计学和数据科学中占据了重要的地位。本文将深入探讨如何使用R进行分析,包括安装R、掌握R Markdown(RMD)的运用,以及如何利用R中的质量度量和算法示例。 ...
数据库基础测验20241113.doc
微信小程序下拉选择组件
DICOM文件+DX放射平片—数字X射线图像DICOM测试文件,文件为.dcm类型DICOM图像文件文件,仅供需要了解DICOM或相关DICOM开发的技术人员当作测试数据或研究使用,请勿用于非法用途。
<项目介绍> - 基于双流 Faster R-CNN 网络的 图像篡改检测 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
c语言
# 基于Arduino的天文数据库管理系统 ## 项目简介 本项目是一个基于Arduino的天文数据库管理系统,旨在为Arduino设备提供一个完整的天文数据库,包括星星、星系、星团等天体数据。项目支持多种语言的星座名称,并提供了详细的天体信息,如赤道坐标、视星等。 ## 项目的主要特性和功能 星座目录包含88个星座,提供拉丁语、英语和法语的缩写和全名。 恒星目录包含494颗亮度达到4等的恒星。 梅西耶目录包含110个梅西耶天体。 NGC目录包含3993个NGC天体,亮度达到14等。 IC目录包含401个IC天体,亮度达到14等。 天体信息每个天体(不包括星座)提供名称、命名、相关星座、赤道坐标(J2000)和视星等信息。 恒星额外信息对于恒星,还提供每年在赤经和赤纬上的漂移以及视差。 ## 安装使用步骤 1. 安装库使用Arduino IDE的库管理器安装本项目的库。 2. 解压数据库将db.zip解压到SD卡中。
# 基于JSP和SQL Server的维修管理系统 ## 项目简介 本项目是一个基于JSP和SQL Server的维修管理系统,旨在提供一个高效、便捷的维修管理解决方案。系统涵盖了从维修订单的创建、管理到配件的录入、更新等多个功能模块,适用于各类维修服务行业。 ## 项目的主要特性和功能 1. 用户管理 管理员和客户的注册与登录。 管理员信息的管理与更新。 客户信息的创建、查询与更新。 2. 维修订单管理 维修订单的创建、查询与更新。 维修回执单的创建与管理。 3. 配件管理 配件信息的录入与更新。 配件库存的管理与查询。 4. 评价与反馈 客户对维修服务的评价记录。 系统反馈信息的收集与管理。 5. 数据加密与安全 使用MD5加密算法对用户密码进行加密存储。 通过过滤器实现登录验证,确保系统安全。 ## 安装使用步骤
HUAWEI DevEco Studio,以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,为运行在HarmonyOS和OpenHarmony系统上的应用和服务(以下简称应用/服务)提供一站式的开发平台。 作为一款开发工具,除了具有基本的代码开发、编译构建及调测等功能外,DevEco Studio还具有如下特点: - 高效智能代码编辑:支持ArkTS、JS、C/C++等语言的代码高亮、代码智能补齐、代码错误检查、代码自动跳转、代码格式化、代码查找等功能,提升代码编写效率。更多详细信息,请参考[编辑器使用技巧] - 低代码可视化开发:丰富的UI界面编辑能力,支持自由拖拽组件和可视化数据绑定,可快速预览效果
《计算机视觉技术》实验报告-8.1提取车辆轮廓
随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多生活之中,随之就产生了“小徐影城管理系统”,这样就让小徐影城管理系统更加方便简单。 对于本小徐影城管理系统的设计来说,系统开发主要是采用java语言技术,在整个系统的设计中应用MySQL数据库来完成数据存储,具体根据小徐影城管理系统的现状来进行开发的,具体根据现实的需求来实现小徐影城管理系统网络化的管理,各类信息有序地进行存储,进入小徐影城管理系统页面之后,方可开始操作主控界面,主要功能包括管理员:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订单管理,用户前台;首页、电影信息、电影资讯、个人中心、后台管理、在线客服等功能。 本论文主要讲述了小徐影城管理系统开发背景,该系统它主要是对需求分析和功能需求做了介绍,并且对系统做了详细的测试和总结。具体从业务流程、数据库设计和系统结构等多方面的问题。望能利用先进的计算机技术和网络技术来改变目前的小徐影城管理系统状况,提高管理效率。
<项目介绍> - SIFT特征提取算法C++与Matlab实现 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
数据介绍 数据名称:国家自然、社科基金部分名单 数据年份:1991-2024年 样本数量:10万+ 数据格式:PDF、excel
卓晴
as-bundled-clients
学习时最后的资料包括面试等信息
# 基于Spring Boot和Ant Design的雨选课系统 ## 项目简介 雨选课系统是一个基于Spring Boot和Ant Design框架构建的前后端分离的选课系统。该系统实现了学生选课、成绩查询、教师成绩修改、课程编辑、课程新增等功能。登录信息使用Redis存储,并支持课程图片的上传功能。 ## 项目的主要特性和功能 1. 用户登录与权限管理 学生、教师和管理员分别有不同的登录权限。 登录信息使用Redis进行存储。 2. 课程管理 学生可以查看可选课程列表,并进行选课和退选操作。 教师可以查看自己教授的课程,并修改学生成绩。 管理员可以编辑和新增课程。 3. 成绩管理 学生可以查询自己的成绩。 教师可以修改学生的成绩。 4. 图片上传 支持课程图片的上传和展示。 5. 日志记录 系统记录请求和响应的日志信息,便于问题追踪和性能分析。
数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目),含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅