设计模型

完成了“领域模型”阶段后,面向对象已经初具雏形,我们已经看到了那熟悉的“对象”了,例如“商品”、“交易”、“商品清单”等,看起来已经进入了面向对象的世界了,你是否已经摩拳擦掌,跃跃欲试,准备开始编码了呢?

且慢,“领域模型”只是万里长征的第一步,通过领域模型分析得到的类还不能指导编码,还需要经过“设计模型”这个阶段的处理,才能基本上指导编码。

前面我们提过,领域模型的对象是没有方法的,但最终的实现肯定是有方法的,因此设计模型的第一个任务就是“为对象添加方法”。

那么是否给领域模型中的对象添加完方法就算是完成了设计模型呢?没有这么简单,给领域模型中的对象添加方法只是设计模型中最简单的一部分工作,设计模型阶段第二个任务是“围绕领域对象设计出非领域对象”。

这句话看起来比较难拗口,为什么要设计出非领域对象呢?道理很简单:领域模型中的对象是静态的,要让这些静态的对象动起来,才能最终完成客户需求。因此必须添加非领域对象,让这些非领域对象来完成让领域对象动起来的事情。

例如:“商品”本身是一个领域对象,但是这个对象是谁创建、谁使用、谁管理呢?领域模型中并没有相关的对象来完成这些职责,因此需要我们设计额外的对象来完成这些职责。

经过前两步之后,看起来设计模型的对象都已经出来了,但是我们如何知道设计得好还是不好,以什么标准来判断我们的设计是否正确呢?相信基础扎实的朋友们已经想到了,这就是万人期待、万众瞩目的,大家都耳熟能详的一个东东:设计模式。设计模型第三个任务就是“应用设计模式、设计原则”。

通过应用设计模式、设计原则,又会添加一批新的对象,接口、父子类、继承、依赖等面向对象的相关概念也逐步清晰,这样就为最终的编码打下了坚实的基础。

到这里为止,“设计模型”阶段的任务基本讲述完了,下面我们看一个简单的样例,还是以POST机为例:

在“领域模型”阶段我们已经分析出了“商品”、“商品清单”、“交易”三个领域对象,我们按照前面所讲的三个步骤一步一步来看“设计模型”阶段如何做(都以“商品”对象为例)。

第一步:“为对象添加方法”

商品对象的方法有:“获取名称”、“获取条形码”、“获取价格”等(有兴趣的朋友可以自己完善),这样对象的几个方法就出来了:getName()、getBarCode()、getPrice()。

第二步:“围绕领域对象设计出非领域对象”

“商品”对象的生命周期包括:创建、修改、使用、销毁,这些任务对象本身是无法完成的,必须添加新的对象来完成,这里我们添加一个新的对象“商品管理”来完成这些任务。这样“商品管理”对象就出来了,而这个对象在用例模型和领域模型中都是没有的。

第三步:“应用设计模式、设计原则”

我们简单的应用DIP原则(可以参考我的Blog《软件设计漫谈之三:30分钟掌握面向对象类的设计原则》)就可以发现,“商品”本身应该作为一个接口,因为不同的商品之间是有很大差异,“商品”又可以分为“食品类商品”、“饮料类商品”、“服装类商品”等等。这样应用了设计原则后,在领域模型中作为对象的“商品”,在设计模型中不再是具体对象,而是接口,然后这个接口派生出“食品类商品”、“饮料类商品”、“服装类商品”等具体对象。

以上的步骤不是瀑布式的,而是迭代式的,例如:第三步识别出“饮料类商品”这个对象后,也需要为它添加方法、设计出相关的类。

实现模型

经过前面的“用例模型”、“领域模型”、“设计模型”的讲解,面向对象分析设计都完了,面向对象已经基本成型,接下来就是要具体实现了,对应的就是“实现模型”。

“实现模型”是整个技术流程中大家接触最多的阶段,只要是做开发的,基本上都是先参与这个阶段的工作。顾名思义:实现模型就是使用具体的技术来实现设计,也就是通常意义上的编码。

但要注意的是,编码不等于敲键盘,之所以称为“实现模型”,因为这里还是有设计的,只不过这个设计和具体的实现技术有关。

例如:Interface在C++中没有,而Java中就有,具体编码的时候如果要实现设计图中的interface,那么就只能分别如下实现:

1)C++:声明没有成员变量、所有成员函数都是纯虚函数的Class;

2)Java:直接声明为interface。

时间: 2024-11-05 12:15:07

设计模型的相关文章

设计模型MVC和JavaBean

六.设计模型1和设计模型2(MVC)1.模型1:JSP+JavaBean2.模型2:MVC M:Model模型 JavaBean V:视图 JSP C:控制器 Servlet 七.模型1开发一个简单的web计算器八.EL表达式EL:Expression Language的缩写,表达式语言.基本语法形式:${EL表达式}1.作用:替换掉JSP中的java表达式<%=%>2.功能: a.从域中获取数据,并把数据显示在页面上.不会出现控制指针异常. ${p.name}: Java: Person p

SSAS 表格设计模型--外键

表格设计模型中,同多维设计模型相似, 维表和事实表相互独立,通过关系数据库中的外键来联系,互相关联构成一个统一的架构. DB中外键是需要唯一性约束的,即A表某列建立主键或者唯一键后,B表才可以引用为外键. 多维设计模型--星型结构 星形架构(star schema)是以事实表为核心,其他的维表围绕这个核心表呈星形分布,维表彼此之间没有任何联系,每个维表中的主键都只能是单列的,同时该主键被放置在事实表中,作为事实表与维表连接的外键. 表格设计模型-- 在创建关系时,提示:无法创建关系,因为每个列都

建立分析模型和设计模型

OOA面向对象分析 面向对象分析产生三种分析模型 功能模型(即用例模型à作为输入) 对象模型:对用例模型进行分析,把系统分解成互相协作的分析类,通过类图/对象图描述对象/对象的属性/对象间的关系,是系统的静态模型 动态模型:描述系统的动态行为,通过时序图/协作图描述对象的交互,以揭示对象间如何协作来完成每个具体的用例,单个对象的状态变化/动态行为可以通过状态图来表达  OOD面向对象的设计 OOD是对OOA的细化  没有严格的界线  OOD的结果直接用于编码 ?   与OOA的输出一样,只是更加

JSON/xml、Processing 以及收集Java的设计模型

JSON简介: 1.基本介绍 JSON(JavaScriptObject Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据.简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率. 2.JSON语法 在 JS 语言中,一切都是对象.因此,任何支持的类型都可以通过 JSON 来表示,例如字

JavaEE 设计模型

关于JavaEE的设计模型参见博客: https://www.cnblogs.com/TomFord/p/10736163.html 里面是根据学习和参见大牛博客所编辑的,希望大家一起交流学习. 原文地址:https://www.cnblogs.com/TomFord/p/10834203.html

Django框架(二):设计模型

1. 设计模型 我们之前操作数据库是通过写sql语句,那么能不能不写sql语句就可以操作数据库呢? 当然可以,这就要使用ORM框架了. 1.1 ORM框架 O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思.在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据.ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表

模块、设计模型、前端面试题积累

re 的 match 和 search 区别? match()函数只检测字符串开头位置是否匹配,匹配成功才会返回结果,否则返回None import re s1 = 'abcabcabc' print(re.match('abc', s1)) print(re.match('abc', s1).group()) print(re.match('abc', s1).span()) search()函数会在整个字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用

Mvc设计模型与三层架构

Mvc(Model-View-Controller):是软件架构的一中设计模式,对软件进行分割成3个层次:视图.模型.控制. 实现对软件的一种动态的设计,并且容易对软件进行扩展.后期的修改,使某些程序尽量避免重复的代码:能够使用负责的程序简单化,程序的架构更直观.通过自身基本的分离,同时并对其程序他基本的部分进行了赋予! 1.Model:对数据库进行设计,使程序拥有的基本pojo实体,应用对象.模型的主体部分,一个模型可被多个视图重用提供数据,提高了应用的可重用性! 2.View:数据的展示,向

PowerDesigner概念设计模型(CDM)中的3种实体关系

CDM 是大多数开发者使用PD时最先创建的模型,也是整个数据库设计最高层的抽象.CDM是建立在传统的ER图模型理论之上的,ER图中有三大主要元素: 实体型,属性和联系.其中实体型对应到CDM中的Entity,属性对应到CDM中每个Entity的Attribute,在概念上基本上是一一对应的. 但在联系上,CDM有了比较大的扩展,除了保留ER图原有的RelationShip概念之外,还增加了Association,Inheritance 两种实体关系,下面就让我们分别看看这些关系的用法和之间的区别