领域建模

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

9 1-9
把注意力放在真实世界的对象 上
围绕着真实的世界的状况,组织你的软件架构. 围绕着真实的世界的状况,组织你的软件架构. 真实世界的变化没有软件需求变化快. 真实世界的变化没有软件需求变化快.
10 1-10
使用泛化和聚集来表示实体对象之间的关系
11 1-11
2个小时内做完你的域模型,不要化太多时间 个小时内做完你的域模型, 我们主要是尽快建立一个在用例文本中使用的 术语表 用例驱动过程假设你的域模型是不完整的, 用例驱动过程假设你的域模型是不完整的,它提 供了一种机制来发现对象. 供了一种机制来发现对象.
20 1-20
第一次我们找出的实体对象
21 1-21
归纳, 归纳,筛选
有一些条目不是必须的, 有一些条目不是必须的,因为这些条目超出了我们域模 型的范围. 他们的行为被伪装成为了名词. 型的范围. 他们的行为被伪装成为了名词. 下面我们一步步的把他们筛选出来: 下面我们一步步的把他们筛选出来: 比如Customer(顾客) Customer(顾客 Account(顾客帐户 顾客帐户) 比如Customer(顾客)和Customer Account(顾客帐户)是 完成相同的概念.但是他们代表不同的东西, 完成相同的概念.但是他们代表不同的东西, 因为顾客 帐户是存储在数据库中的实体, 而顾客是一个用户角色. 帐户是存储在数据库中的实体, 而顾客是一个用户角色. Customer和Sellers是两个角色 是两个角色, Customer和Sellers是两个角色,他们会被放在用例文本 中. 术语User Account和 Account也是相同的概 术语User Account和 Customer Account也是相同的概 所以我们任选其中一个, 念, 所以我们任选其中一个,所以我们选择一 Account”. 个”Customer Account . 术语List Accounts和 List也是相 术语List of Accounts和Master Account List也是相 同的.所以我们放弃一个选择一个. 同的.所以我们放弃一个选择一个. 因为我们有一个
7 1-7
10种最常见的域建模错误 10种最常见的域建模错误
立即给关联指定多重度(multiplicity),确保每个关联 立即给关联指定多重度(multiplicity),确保每个关联 (multiplicity), 都有明确的多重度. 都有明确的多重度. 对名词和动词做过度的分析, 对名词和动词做过度的分析,而背离初衷 不对用例和时序图进行研究, 不对用例和时序图进行研究,就将操作分配给类 在确保已经满足用户需求之前, 在确保已经满足用户需求之前,对代码进行优化以提高 重用性. 重用性. 对于每个” 部分(part of)”关联, 对于每个”…部分(part - of)”关联,就使用聚集还是 组合(composition)而争论不休. (composition)而争论不休 组合(composition)而争论不休. 未对问题空间进行建模之前,就假定一种具体的实现策 未对问题空间进行建模之前, 略. 将类命名为难以理解的名称( cPortMgrIntf),而不是 将类命名为难以理解的名称(如cPortMgrIntf),而不是 直观的名称( 直观的名称(如PortfolioManager)
8 1-8
10种最常见的域建模错误 10种最常见的域建模错误
直接进入到实现结构, 直接进入到实现结构,如友元关系和参数化关系 在域类和关系性数据库表之间建立一对一的映射. 在域类和关系性数据库表之间建立一对一的映射. 过早的模式化, 过早的模式化,这将导致根据同用户问题毫无关系的模 式创建解决方案. 式创建解决方案.
6 1-6
建立域模型的10个指导原则 建立域模型的10个指导原则 10
将注意力放在真实世界(问题域) 将注意力放在真实世界(问题域)中的实体上 用泛化和聚集关系来表示对象之间是怎么样联系在一起的 限制你画出你的域模型在12 12个小时内 限制你画出你的域模型在12个小时内 抽象你的问题域中的类, 抽象你的问题域中的类,不包含方法和属性 不要把你的域模型弄错成数据模型 不要把你的对象和数据表弄混淆了, 不要把你的对象和数据表弄混淆了,你的数据表包含一系 列东西的集合 把你的域模型中的对象当成为项目中的术语表 写用例文本前要初始化你的域模型,避免命名上的不明确。 写用例文本前要初始化你的域模型,避免命名上的不明确。 不要期望你的最终的类图和域模型一致, 不要期望你的最终的类图和域模型一致,但是它们应该很 相似 不要把你的边界类放在你的域模型中, 不要把你的边界类放在你的域模型中,域模型中只包含问 题域中的对象。 题域中的对象。
4 1-4
为什么要领域建模? 为什么要领域建模?
域模型是一个相互协作的对象列表,在项目开发过程中, 域模型是一个相互协作的对象列表,在项目开发过程中, 它是准确的,不易改变的。 它是准确的,不易改变的。 为了沟通的需求:定义明确的术语表, 为了沟通的需求:定义明确的术语表,有利于消除开发 过程中的歧义。 过程中的歧义。
13 1-13
将域模型当成为一个术语表
使用域模型是消除歧义的第一步. 使用域模型是消除歧义的第一步.
14 1-14
不要将对象和数据表混淆
一个对象代表一个单独的实例. 一个对象代表一个单独的实例.一个数据库表代 表一个同类的一个集合. 表一个同类的一个集合. 如果你称呼一个域对象book, book,你并不是指一个 如果你称呼一个域对象book,你并不是指一个 book表 而是指一本单独的书. book表,而是指一本单独的书. 表中的一列往往映射为一个类中的一个属性. 表中的一列往往映射为一个类中的一个属性. 但是一个数据表中的列往往比一个类包含的属 性要多.(比如一个数据表往往包含一个外键), 性要多.(比如一个数据表往往包含一个外键), .(比如一个数据表往往包含一个外键 所以表中的列并不是和类中的属性并不是1:1 1:1对 所以表中的列并不是和类中的属性并不是1:1对 应的. 应的.
17 1-17
不要将一些边界类放入域模型中
我们关注的重点是问题空间中的对象,这些问题空间中 我们关注的重点是问题空间中的对象 这些问题空间中 的对象相对于需求来说,变化是很小的 变化是很小的. 的对象相对于需求来说 变化是很小的
18 1-18
案例: 案例:找出案例中的域对象
网上书店应当是基于web的 网上书店应当是基于web的,它必须有一个弹性的结构支持前台和后台的 web 扩展。 扩展。 网上书店可以卖书,并且订单可以通过网络传递。 网上书店可以卖书,并且订单可以通过网络传递。 在结帐前,用户能够将书添加到在线购物车(Shopping Cart)上,也同样 在结帐前,用户能够将书添加到在线购物车(Shopping Cart)上 的能够将购物车中的书目删除。 的能够将购物车中的书目删除。 用户能够维护一个他最喜欢的图书列表( List), ),这些图书是他随 用户能够维护一个他最喜欢的图书列表(Wish List),这些图书是他随 后想购买的。 后想购买的。 在邮递图书前, 在邮递图书前,用户可以撤消他的订单 用户可以使用信用卡(Credit Card)或者定购单 货到付款)(Purchase 或者定购单( 用户可以使用信用卡(Credit Card)或者定购单(货到付款)(Purchase Order)支付图书费用 支付图书费用。 Order)支付图书费用。 用户可以退书 用户可以注册账号(Account) 这样用户登陆时系统可以记住他的姓名, (Account), 用户可以注册账号(Account),这样用户登陆时系统可以记住他的姓名, 地址和信用卡信息。 地址和信用卡信息。 系统在中央数据库维护注册的用户(User)信息。 (User)信息 系统在中央数据库维护注册的用户(User)信息。
19 1-19
案例: 案例:找出案例中的域对象
书评(Book Review)应当在显示图书的列表中和书的标题在 书评 应当在显示图书的列表中和书的标题在 一起显示 书评的长度应当是适中的,应当经过检查后再发布到网站上。 书评的长度应当是适中的,应当经过检查后再发布到网站上。 编辑人员也可以写下它们的编辑书评(Editorial Review), 编辑人员也可以写下它们的编辑书评 , 这些书评也要显示在图书的详细信息页面上。 这些书评也要显示在图书的详细信息页面上。 网上书店也可以允许第三方书商(third-part sellers)将它们 网上书店也可以允许第三方书商 将它们 的自己的图书目录添加上来。 的自己的图书目录添加上来。 当用户登陆时候, 当用户登陆时候,他的密码必须和数据库存储的用户注册的 信息匹配才能允许它登陆。 信息匹配才能允许它登陆。 用户可以通过各种搜索方法-书名,作者(Author),关键词 用户可以通过各种搜索方法-书名,作者 , 和目录(Catalog)来搜索图书,并且显示搜索出来的图书的 来搜索图书, 和目录 来搜索图书 详细信息。 详细信息。 用户对最喜欢的书可以写书评他, 用户对最喜欢的书可以写书评他,书评要在显示图书的详细 信息页面中显示,书评也应当包含用户的等级(Customer 信息页面中显示,书评也应当包含用户的等级 Rating)。 。
领域建模
1
目标
掌握领域建模的主要目标 掌握领域建模的10大原则 掌握领域建模的 大原则
2 1-2
域建模
3 1-3
域模型是什么
域模型本质上是一个术语表, 域模型本质上是一个术语表,一个你项目中使用的活的 字典。 字典。 域模型是一个简单的类图。 域模型是一个简单的类图。在这个图中展示了各个域对 象之间的泛化和聚集关系。 象之间的泛化和聚集关系。 领域类中没有包含属性,也没有包含行为。 领域类中没有包含属性,也没有包含行为。领域类中相 关的内容,要用于编写用例文本。 关的内容,要用于编写用例文本。 领域建模的阶段就等同于系统分析。 领域建模的阶段就等同于系统分析。
来自百度文库
12 1-12
不要将域模型弄错成为数据模型
对使用关系型数据库表的遗留系统进行重构的时候,数 对使用关系型数据库表的遗留系统进行重构的时候 数 据库中的表可能是很好的域对象的来源. 据库中的表可能是很好的域对象的来源 但是关系型表 中的很多属性不能照搬到对象模型环境中. 中的很多属性不能照搬到对象模型环境中
16 1-16
不要期望你最终的类图和你的域 模型精确匹配 类图会比你的域模型的内容更详细些. 类图会比你的域模型的内容更详细些.域模型我 们故意保持简洁.当你进入详细设计的时候( 们故意保持简洁.当你进入详细设计的时候(比 如在时序图中)我们会将一些帮助类,GUI界面类, ,GUI界面类 如在时序图中)我们会将一些帮助类,GUI界面类, 工厂类以及其他一些类加入到类图中. 工厂类以及其他一些类加入到类图中. 域模型 中的类图会分开成为几个详细的类. 中的类图会分开成为几个详细的类.
5 1-5
编写用例文本前建立域模型? 编写用例文本前建立域模型?
在分析时,首先找出领域对象,如果有遗留系统, 在分析时,首先找出领域对象,如果有遗留系统,那么 可以从遗留系统得到真实世界的领域对象。 可以从遗留系统得到真实世界的领域对象。在这个基础 之上,我们才建立原型,再建立用例,画出用例图。 之上,我们才建立原型,再建立用例,画出用例图。所 以建立用例之前, 以建立用例之前,需要找出领域对象 1)用例文本是开发模型动态部分的基础,描述软件的 )用例文本是开发模型动态部分的基础, 行为,域模型是开发模型静态部分的基础,描述软件的 行为,域模型是开发模型静态部分的基础, 结构。 结构。 2)用例文本必须和真实的世界相连,必须非常贴近正 )用例文本必须和真实的世界相连, 在设计的系统, 在设计的系统,这样才能把模型的动态部分和静态部分 紧紧的绑定在一起, 紧紧的绑定在一起,从而使得分析和设计从用例驱动进 行下去。 行下去。 3)用例文本描述中要使用领域模型中的术语表 ) 只有在用例文本在叙述中把领域对象也包含进来, 只有在用例文本在叙述中把领域对象也包含进来,这时 才把静态对象和动态行为绑定在一起。 才把静态对象和动态行为绑定在一起。我们用例文本的 描述才没有脱离真实的世界, 描述才没有脱离真实的世界,没有脱离真实的问题域
15 1-15
写用例文本前建立域模型
因为你使用域模型来消除问题域抽象的概念, 因为你使用域模型来消除问题域抽象的概念,所 以你使用模糊的术语来描述你的用例文本是非 常愚蠢的. 常愚蠢的.所以请你在写用例文本前花两个小时 来建立域模型,这样就可以消除项目小组对于用 来建立域模型 这样就可以消除项目小组对于用 例文本中名词使用的二义性. 例文本中名词使用的二义性.
相关文档
最新文档