1、第十章系统分析(第十章系统分析(3 3)任务任务3 3 创建领域模型创建领域模型什么是领域模型什么是领域模型何时创建领域模型何时创建领域模型2 2在前一个任务中我们已经获得了用例模型,了解了在前一个任务中我们已经获得了用例模型,了解了用户的使用场景。在当前任务中,我们需要利用用用户的使用场景。在当前任务中,我们需要利用用例模型来分析系统中将涉及到的主要概念性对象,例模型来分析系统中将涉及到的主要概念性对象,并需要根据这些实际的问题空间对象设计软件的结并需要根据这些实际的问题空间对象设计软件的结构,这些问题域抽象的模型是整个对象建模工作的构,这些问题域抽象的模型是整个对象建模工作的基础。基础。如
2、何根据如何根据用例用例描述来构建相应的领域模型呢?描述来构建相应的领域模型呢?3 3定义定义是对领域内的概念类或现实世界中对象的可视化是对领域内的概念类或现实世界中对象的可视化表示。领域模型也被称为概念模型、领域对象模表示。领域模型也被称为概念模型、领域对象模型和分析对象模型。型和分析对象模型。理解理解UPUP领域模型是领域模型是UPUP业务对象模型(业务对象模型(BOMBOM)的特化)的特化,专用于解释业务领域中重要的,专用于解释业务领域中重要的“事务事务”和产品和产品。领域模型可以被描述成一组没有定义操作的类图领域模型可以被描述成一组没有定义操作的类图(UMLUML表示法)。它提供了概念透
3、视图。表示法)。它提供了概念透视图。领域对象或概念类领域对象或概念类概念类之间的关联概念类之间的关联概念类的属性概念类的属性银行领域模型的例子银行领域模型的例子任何一个银行任何一个银行“账户账户”(这里没有详细分类)可能与多个(这里没有详细分类)可能与多个“凭证凭证”相关;相关;具体而言,凭证可以是银行卡、存折、存单等形式;具体而言,凭证可以是银行卡、存折、存单等形式;任何凭证都有明确的生效起始日和终止日;任何凭证都有明确的生效起始日和终止日;但各种凭证的凭证号却不是统一的,比如存折和信用卡有但各种凭证的凭证号却不是统一的,比如存折和信用卡有不同的编号格式。不同的编号格式。领域模型与数据模型的
4、区别领域模型与数据模型的区别领域模型不是数据模型。领域模型不是数据模型。数据模型的实体对象是通过对数据模型的定义,数据模型的实体对象是通过对数据模型的定义,来表示存储于某处的持久性数据。来表示存储于某处的持久性数据。在领域模型中,并不会排除需求中没有明确要求在领域模型中,并不会排除需求中没有明确要求记录其相关信息的类,也不会排除没有属性的概记录其相关信息的类,也不会排除没有属性的概念类。念类。在领域模型中没有属性的概念类是合法的,或者在领域模型中没有属性的概念类是合法的,或者在领域内充当单纯行为角色而不是信息角色的概在领域内充当单纯行为角色而不是信息角色的概念类也是有效的。念类也是有效的。创建
5、领域模型几个步骤创建领域模型几个步骤寻找(识别)类寻找(识别)类筛选类筛选类确定关系确定关系识别类的属性识别类的属性以当前迭代中的需求为界以当前迭代中的需求为界领域对象类的最佳来源领域对象类的最佳来源高级问题陈述、低级需求和问题空间的专业知识。高级问题陈述、低级需求和问题空间的专业知识。寻找概念类的三条策略寻找概念类的三条策略1.1.重用和修改现有的模型重用和修改现有的模型这是首要、最佳且最简单的方法。这是首要、最佳且最简单的方法。在许多领域中,都存在已发布的、绘制精细的领域模型和数据在许多领域中,都存在已发布的、绘制精细的领域模型和数据模型。这些领域包括库存、金融、卫生等等。模型。这些领域包
6、括库存、金融、卫生等等。2.2.使用分类列表使用分类列表表中包含大量值得考虑的常见类别,其中强调的是业务信息系表中包含大量值得考虑的常见类别,其中强调的是业务信息系统的需求。统的需求。该准则还建议在分析时建立一些优先级。该准则还建议在分析时建立一些优先级。3.3.确定名词短语确定名词短语分类列表举例分类列表举例执行工作所需的进度表、手册、文档等执行工作所需的进度表、手册、文档等晒书计划表、图书推荐表金融、工作、合约、法律材料的记录金融、工作、合约、法律材料的记录图(藏)书列表,统计报表金融手段金融手段容器中的事物容器中的事物条目其他协作的系统其他协作的系统院图书馆管理系统类别:描述通常有类别类
7、别:描述通常有类别图书类别事务(物理或信息)的容器事务(物理或信息)的容器资料室、个人藏书室准则:特写是在创建控制软件或进行仿真时非常有用事务的描述事务的描述图书介绍、图书评价重要事件,通常包含我们需要记录的时间或地点重要事件,通常包含我们需要记录的时间或地点借阅记录、归还记录、催还列表物理对象物理对象条码扫描仪准则:我们通常要知道交易所涉及的各方院图书馆管理系统交易的地点;服务的地点交易的地点;服务的地点资料室准则:重要与交易相关的人或组织的角色;用例的参与者与交易相关的人或组织的角色;用例的参与者资料管理员、拣书者、藏书者准则:(产品或服务)是交易的对象交易记录在何处?交易记录在何处?借还
8、记录准则:交易中通常会涉及项目借书证与交易或交易相关的产品或服务与交易或交易相关的产品或服务借还记录准则:十分关键(涉及金钱),所以作为起点预订交易项目交易项目图书概念类的类别示例业务交易业务交易借阅,归还确定名词短语确定名词短语用例UC2.1:添加藏书基本流程:1.藏书者登记新购买图书的信息,包括书名、作者、译者、出版社、购买时间(系统自动给出录入时间)、价格、对图书的推荐信息、喜爱程度,数量、类别。2.系统进行输入信息的有效性检查3.系统根据图书名称进行重复图书检查4.存储图书信息,并提示存储成功。5.系统重新显示初始添加藏书界面,用户可以进行下一本图书的录入过程。分支流程:2.a、如果藏
9、书者录入信息有误 1、系统提示藏书者此信息 2、返回刚才的添加藏书界面,界面保持原来填写数据3.a、如果图书名称发生重复,系统将提示此信息,并给出相应图书列表,用户可以查阅图书的详细信息,同时要求用户对此情况进行处理。1、如果确认图书录入重复,则系统放弃对当前图书信息的存储2、如果只是同名不同书,则用户确认此情况后,系统对当前录入的图书信息进行保存。用例用例UC2.1:添加藏书:添加藏书基本流程:基本流程:1.藏书者藏书者登记新购买图书的信息图书的信息,包括书名书名、作者作者、译者译者、出版社出版社、购买时间购买时间(系统系统自动给出录入时间录入时间)、价格价格、对图书的推荐信息推荐信息、喜爱
10、程度喜爱程度,数量数量、类别类别。2.系统进行输入信息的有效性检查3.系统根据图书名称图书名称进行重复图书检查4.存储图书信息,并提示存储成功。5.系统重新显示初始添加藏书界面添加藏书界面,用户可以进行下一本图书的录入过程。分支流程:分支流程:2.a、如果藏书者藏书者录入信息有误 1、系统提示藏书者此信息 2、返回刚才的添加藏书界面添加藏书界面,界面保持原来填写数据数据3.a、如果图书名图书名称发生重复,系统将提示此信息信息,并给出相应图书列表图书列表,用户可以查阅图书的详细信息详细信息,同时要求用户对此情况进行处理。1、如果确认图书录入重复,则系统放弃对当前图书信息的存储2、如果只是同名不同
11、书,则用户确认此情况后,系统对当前录入的图书信息进行保存。冗余冗余表示相同事物的两个名词就是冗余。表示相同事物的两个名词就是冗余。例如,例如,“图书信息图书信息”和和“图书的详细信息图书的详细信息”,选择简洁的,选择简洁的“图书信息图书信息”作为候选类。再如,用户能够被藏书者、拣书者作为候选类。再如,用户能够被藏书者、拣书者完全涵盖,故删除用户;销售价格指名价格的含义,故删除完全涵盖,故删除用户;销售价格指名价格的含义,故删除价格。价格。不相关不相关名词与问题域没有关系名词与问题域没有关系它可能是有效类,但不在当前项目的范围之内。它可能是有效类,但不在当前项目的范围之内。例如,例如,“员工考绩
12、标准员工考绩标准”是个名词,但是个名词,但RPRP系统不会测量或跟系统不会测量或跟踪员工的工作实绩;电话和传真不是系统所关注的内容。踪员工的工作实绩;电话和传真不是系统所关注的内容。属性属性实际上描述了另一个类的结构的名词是属性。实际上描述了另一个类的结构的名词是属性。笼统笼统名词的描述覆盖面太大,以至于在对某个业务进名词的描述覆盖面太大,以至于在对某个业务进行描述时,不得不对该名词概念进行细分,单独行描述时,不得不对该名词概念进行细分,单独拿出来根本不能说明问题。例如,拿出来根本不能说明问题。例如,“录入信息录入信息”包括包括“图书信息图书信息”和和“藏书信息藏书信息”两部分,在应两部分,在
13、应用录入信息进行描述时,必须加以额外说明。用录入信息进行描述时,必须加以额外说明。操作操作描述某个类职责的名词自身不是一个类,而是一描述某个类职责的名词自身不是一个类,而是一个操作。如税额计算。个操作。如税额计算。角色角色描述一个特定实体的状态或其分类的名词多半不描述一个特定实体的状态或其分类的名词多半不是一个类。例如,是一个类。例如,“最佳顾客最佳顾客”是一个顾客在一是一个顾客在一定时间下的状态。定时间下的状态。事件事件描述特定时间频率的名词,通常表示了领域必须描述特定时间频率的名词,通常表示了领域必须支持的一个动态元素。例如,支持的一个动态元素。例如,“每星期打印一次每星期打印一次发票发票
14、”中的中的“星期星期”就不是候选类。就不是候选类。实现结构实现结构描述硬件元素或算法的名词最好是删除或指派为描述硬件元素或算法的名词最好是删除或指派为某个类的操作。例如,某个类的操作。例如,“打印机打印机”和和“复利叶算复利叶算法法”。1616建立关联的方法建立关联的方法显式的关联可以从用例中找到显式的关联可以从用例中找到从事件表中找到关联的早期标志从事件表中找到关联的早期标志注意注意应该避免加入大量的关联应该避免加入大量的关联添加关联的注意事项添加关联的注意事项立即给关联制定多重度,确保每个关联都有明确的多重度立即给关联制定多重度,确保每个关联都有明确的多重度不对用例和时序图进行研究,就将操
15、作分配给类不对用例和时序图进行研究,就将操作分配给类在确保已满足用户需求之前,对代码进行优化以提高重用在确保已满足用户需求之前,对代码进行优化以提高重用性性对于每个对于每个“部分部分(part-of)”(part-of)”关联关联,就使用聚集还是组合就使用聚集还是组合而争论不休而争论不休未对问题空间进行建模之前,就假定一种具体的建模策略未对问题空间进行建模之前,就假定一种具体的建模策略在领域类和关系型数据库表之间建立一对一的映射在领域类和关系型数据库表之间建立一对一的映射过早地执行过早地执行“模式化模式化”,这将导致根据同用户问题毫无关,这将导致根据同用户问题毫无关系的模式创建解决方案系的模式
16、创建解决方案整理后的结果整理后的结果1.1.在什么情况下我们需要属性在什么情况下我们需要属性当需求建议或暗示需要记住信息时,引入属性当需求建议或暗示需要记住信息时,引入属性2.2.获取属性的渠道获取属性的渠道查看用例文档,寻找事件流中的名词查看用例文档,寻找事件流中的名词查看需求文档,发现系统要搜集的信息查看需求文档,发现系统要搜集的信息若已经定义了数据库结构,则数据库表中的字段若已经定义了数据库结构,则数据库表中的字段就是属性就是属性选择属性时应考虑的因素选择属性时应考虑的因素只有系统感兴趣的特征才包含在类的属性中只有系统感兴趣的特征才包含在类的属性中分析系统建模的目的,也会影响属性的选取分析系统建模的目的,也会影响属性的选取3.3.每条属性都能够回溯到用户的需求每条属性都能够回溯到用户的需求不要盲目添加不必要的属性,造成系统混乱不要盲目添加不必要的属性,造成系统混乱4.4.类的属性要适当。类的属性要适当。若某个类的属性太多,则可考虑分解成更小的类若某个类的属性太多,则可考虑分解成更小的类若某个类的属性太少,可考虑将类进行合并若某个类的属性太少,可考虑将类进行合并掌握掌握领域模型的概念领域模型的概念领域模型构建过程领域模型构建过程2424