我的课件35领域模型

上传人:E**** 文档编号:90934021 上传时间:2019-06-20 格式:PPT 页数:38 大小:3.82MB
返回 下载 相关 举报
我的课件35领域模型_第1页
第1页 / 共38页
我的课件35领域模型_第2页
第2页 / 共38页
我的课件35领域模型_第3页
第3页 / 共38页
我的课件35领域模型_第4页
第4页 / 共38页
我的课件35领域模型_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《我的课件35领域模型》由会员分享,可在线阅读,更多相关《我的课件35领域模型(38页珍藏版)》请在金锄头文库上搜索。

1、面向对象设计 领域模型,计算机学院软件工程系 Email:Xiahui_ Telphone:15829202190 QQ:79003370(不聊天),目 录,DDD概述 领域模型元素 聚合与聚合根 工厂与仓储 DDD分层结构 DCI架构,什么是分析类,设计类,分析类-analysis class 代表问题域中一种即时抽象,它对应真实世界的业务概念。 设计类-design class 一种达到可以实现程度的类。 分析类与设计类的区别 分析类是用于理解业务;而设计类用于理解技术解决方案,例如设计模式。分析类是从问题域(业务需求)中提取的,并没有具体实现;而设计类包含来自问题域(业务需求)和解决域(

2、e.g. J2EE,.NET or web service)的特性。,2004年Eric Evans 发表Domain-Driven Design Tackling Complexity in the Heart of Software (领域驱动设计 )简称Evans DDD 领域建模是一种艺术的技术,它是用来解决复杂软件快速应付变化的解决之道,DDD,DDD优点,元素 实体 值对象 服务,领域模型元素,实体(Entity) 实体核心是用唯一的标识符来定义,而不是通过属性来定义。 即使属性完全相同也可能是两个不同的对象。 实体本身有状态的,实体又演进的生命周期,实体本身会体现出相关的业务行为

3、,业务行为会实体属性或状态造成影响和改变。 对应着四色原型中的PPT(人物-地点-事物),领域模型元素,领域模型元素,值对象(Value Object) 描述领域的某个方面本身没有标识的对象 没有所谓的唯一标识,若果真要说唯一标示,整个VO就是唯一标识。 VO对应着四色原型中的Desciption 领域模型中的值对象是可以有行为的,Area a = new Area(2,“cm“);,Area是否需要给一个ID?,领域模型元素,书目:图书号,书名,ISBN,图书类别,作者,出版社,出版日期,总页数,定价,图书分类、藏书数量,实体与值对象举例,书:条形码号,地点、当前状态、入库日期,Descip

4、tion 书目,PPT 书,领域模型元素,常见值对象 没有生命周期的类(不能是抽象类),即不需要唯一标识 随着实体类的存在而存在,实体类的消亡而消亡 一些统计的值 有唯一标识,但是属性不能修改,Area a = new Area(2,“cm“);,每个学生有一个邮政地址,邮政地址邮政编码,收件地址,收件人 当学生被删除后,他的邮件地址也要随之删除,问题:数据库中如何存储邮政地址,一个帖子的回复的数量,最近一次回复时间,例:你的一个小汽车,是一个PPT, 其属性有:车牌、购买日期、行驶里程数 Desc是对你的汽车进行分类,并对其共性进行描述, 即作为一个汽车应该具有的属性 制造商、型号、可选颜色

5、,领域模型元素,实体与值对象举例,实体类 汽车: 车牌、购买日期、行驶里程数、制造商、型号、颜色 值对象 制造商、型号、颜色 注意:如果我们做的系统是汽车销售系统,则制造商应该是,领域模型元素,实体与值对象举例,Class Car String chepai;/ 车牌 Date gmrq;/ 购买日期 float xslcr;/ 行驶里程数 Manufacturer zzs;/制造商 Xinghao xh;/型号 Carcolor ys;/颜色 ,Class Manufacturer String zzsid;/标识 String zzsmc;/ 制造商名称 String gj;/国家 int

6、 getPingpai() /获取拥有的品牌 ,Enum Xinghao fengyun,A3,A1,A7,luihu; ,Enum Carcolor red,blue,brown,black,white; ,邮购软件中的地址是_:用地址作为发货目的地。如果住在一起多个室友邮购,不影响邮递,有名字作为标识。 邮政软件中的地址是_:可将地区分层次结构,区 城市 街道 邮编 个人地址。 我们拿口袋中的钱买东西,钱是_。 为了鉴定钱的真假,我们将钱交给银行的鉴定人员进行鉴定,钱是_。,领域模型元素,实体与值对象举例,领域模型元素,值对象特性 共享性 值对象非常巨大,每个电源插座都是一个值对象,一个房

7、子有上百个插座对象,由于值对象可以互换 共享,只使用一个插座实例就可以。 不变性 值对象属于实体,当实体把它的值对象传递给其他对象时,如果其他对象对这个传过来的值对象修改不当,就会破坏其所有者的不变性约束,从而破坏它的所有者实体对象。,领域模型元素,服务(service) 有一些领域中的行为,它不属于任何一个对象 找出学校中所有年龄大于20岁的陕西省男生 统计学校的所有学生平均年龄 服务的3个特征: 1. 服务执行的操作涉及一个领域概念,这个领域概念通常不属于一个实体或者值对象。 2. 被执行的操作涉及到领域中的其他的对象。 3.操作是无状态的。,领域模型元素,服务举例,例:银行系统中,转帐功

8、能如何表示,TransferService类 public transfer(String sourseid,String targetid,float money),Accout类 public transfer(String targetid, float money),Accout类 public transfer(Accout target, float money),TransferService类 public transfer(Accout sourse,Accout target,float money),领域模型元素,服务举例,Accout类 add(float money)

9、 sub(float money) sourse.getActiveMoney()/获取活期金额 TransferService类 public transfer(Accout sourse, Accout target,float money) if(sourse.getActiveMoney()money) sourse.sub(money); target.add(money); /记日志 ,聚合与聚合根,聚合Aggregate 一个对象可能有多个层次,也可能有多个子实体,但是这些子实体都不可能孤立存在,它们必须依附于一个聚合根存在,它们和根节点具有同样的生命周期。 每个聚合有一个根。这

10、个根是一个实体,并且它是外部可以访问的唯一的对象。 我们在从真实世界对业务对象进行识别和概念建模的时候,关注的就是聚合根,这才是我们真正要管理的业务对象。,聚合与聚合根,聚合根举例,如果一个客户消亡,客户联系方式,客户的多个联系信息将不再有任何意义。如果一张采购订单头消失,那么采购订单明细没有任何存在的意义。客户,采购订单,发票这些从真实业务中转化过来的业务对象才是真正的领域核心对象。,聚合与聚合根,聚合根举例,强调聚合根的概念,因此我们在关注领域模型的时候将有助于我们打破原有的关系型数据库的思维模式,转化为对象和领域的思维模式。 可以看到领域建模和聚合根的思路正是既适合于关系型数据库,也适合

11、NoSql数据库的建模思路。因为在NoSQL持久化的时候,我们看到采购订单就是一个对象,其它明细和关联信息都是这个对象下的子实体信息,采购订单应该作为一个对象整体进行查询和存储,我们并不关系NoSQL会如何去存储这个对象。让我们正在关注领域对象,而不是去关心如何持久化。,聚合与聚合根,聚合的意义,工厂和仓储,对象的生命周期管理 工厂(Factory) 工厂一般负责创建聚合根 当聚合的根建立时,所有聚合包含的对象将随之建立,即创建聚合根对象是一个原子操作。 仓储(Respository) 仓储不一定要把数据放到数据库中,只是持久化到一个介质中 把聚合对象的保存(冬眠)和调用(激活)交由Respo

12、sitory完成。 由Repository负责如何将对象分解成数据库能够保存的格式。,工厂和仓储,工厂代码举例,public Customer createCustomer(String id,String name, Address adress ,ContactInfo contactInfo) . ,工厂和仓储,仓储的实现 传递一个或者多个代表筛选条件的参数用来选择一个或者一组匹配的对象,工厂和仓储,仓储的实现 用规约指定一个查询条件。,工厂和仓储,工厂与仓储的区别,DDD的分层结构,DDD的分层结构,基础结构层 为各层提供各项通用技术能力而构建的,它可以为领域层提供像Hibernate

13、、LINQ、ADO.NET等持久化机制,为应用层传递消息,为表现层提供插件等等。,DDD的分层结构,领域层 它是系统的核心部分,代表业务的逻辑概念。它会根据业务的实际流程定制了业务信息以及业务规则,并按一定的关系制定领域模型。 领域模型尽管需要依赖基础结构层进行保存,但领域模型之间的逻辑关系是跟基础结构层相隔离的。即使基础结构层从NHibernate技术转换成LINQ技术,也不会影响到领域层的结构。领域模型只会依赖实际的业务逻辑,它只会根据业务的转变而灵活变动。,DDD的分层结构,应用层 它的任务是协调领域层与表现层之间的关系,也可以作为系统与外界沟通的桥梁,在这层里面不会包括任何的业务逻辑。

14、 一般不能将领域层的对象直接传递给表现层,要转换为DTO对象。 可以用不同的技术实现,比如SOA,Servlet,DDD的分层结构,举例 应用层,BookService addBook(String bookName,Publisher p) lendBook(String userid,String bookid) returnBook(String bookid) ,public void lendBook(String userid,String bookid) User user = UserRepository.getByid(userid);/获取领域对象 Book book =

15、BookRepository.getByid (bookid); user.lend(book); ,DDD的分层结构,DDD存在的问题 DDD只表示了四色原型中的PPT和DESC,剩下的ROLE和MI该如何表示?,DCI架构,DCI-Data Context Interaction 数据Data: 领域模型 场景Context 领域模型活动存在的场景,或者前提条件。 交互Interaction 模型在特定场景下以某种角色活动的行为操作。不同角色有不同的交互。,DCI架构,DCI-核心思想,对象扮演某个角色进入场景,然后在场景中进行交互,场景的参与者就是对象所扮演的角色; 一个对象可以扮演多个

16、角色,一个角色也可以被多个对象扮演,角色具有一些特有的属性和行为; 场景的生命周期,场景是一个时间与空间的结合,可以理解为某个活动;一旦活动结束,则场景也就消失; 对象的属性和行为分为: A:核心属性和行为,这些属性或行为是不依赖于任何场景的; B: 场景属性和行为,对象通过扮演某个角色进入某个特定场景时拥有的属性或行为,一旦对象离开了这个场景,不再扮演了这个角色后,这些场景属性或行为也就不再属于该对象了;,DCI架构,DCI-核心思想,比如人有核心的属性和行为:身高、体重、吃饭、睡觉,然后当人扮演教师的角色在教室里上课时,他则具有上课的行为,一旦回到家里,就又变成了一个普通的人; 比如一个物品,在生产时叫产品,在销售时叫商品,坏了的时候叫废品,它在不同阶段扮演不同的角色所具有的属性是不一样的;,DCI架构,DCI代码举例,用例-借书:读者去图书馆借书,找出实体类,角色类,场景,实体类:读者,书,图书馆 角色类:借阅者,被借的书,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号