在设计和开发应用系统时,往往需要考虑系统的可维护性,可扩展性,可重用性等;而且,一个大规模的系统开发,往往都是多人分工合作,为了开发上的效率性考虑,一般都安排不同的专家(开发人员)负责不同的领域担当不同的工作。 MVC的构成要素:
MVC模式有Model,View,Controller三部分构成。
Model
模型。主要用来负责业务逻辑的处理,数据的保持。Model是MVC模式的核心部分,它也是一个应用需要实现的最主要的部分:进行业务逻辑的处理。
View
视图。负责数据的输出,画面的表示。
Controller
控制器。负责接收从视图发送过来的数据,同时控制Model与View部分。它的主要任务是控制Model与View,所以被称为控制器。
MVC模式输入输出流程图:
1, Controller接收用户输入
2, Controller调用Model进行业务逻辑处理(控制) 3, Controller通知/调用View进行画面描画处理(控制) 4, View根据需要适当参照Model的值 5, View进行画面描画处理
使 用MVC模式,分离模型、视图与控制器,使得这三部分功能相对独立,一方面可以让系统的设计开发工作分工明确,方便开发人员的互相合作;另一方面,按照 MVC模式划分的系统的各部分功能保持独立,有利于组件复用,例如,一个模型可以对应多个显示视图,也就是说,同一套业务逻辑只要改变视图便可对应不同的用户界面。
GRASP Polymorphism Pattern - GRASP之多态性模式
多态性模式(Polymorphism)是GRASP扩展模式的一种,它通过多态操作把基于类型的可变行为的定义职责分配给行为发生的类。
问题
根据类型(类)的不同而发生变化的行为的定义职责,应该分配给谁?
问题比较抽象难懂,我们通过举例来解释一下。
比如物体的移动行为,不同的物体有不同的移动方法,比方说汽车与人的移动方法不一样。 在面向对象设计中,怎么样分配此类行为的定义职责呢?或者说,此类行为应该在哪定义怎么定义呢?
Polymorphism模式所提倡的解决方案
Polymorphism模式提倡通过多态操作把基于类型的可变行为的定义职责分配给行为发生的类。
又是一个抽象的概念。我们来解释一下。
多态性是面向对象的重要概念之一。所谓多态性,简单地说,就是具有同一接口的不同对象对相同的消息具有不同的行为。或者说同一消息作用于不同的对象,而产生不同的结果。 传统的设计方法,当类型发生变化时,利用条件判断语句对类型进行判断,然后执行不同的行为。
Polymorphism模式把各变化的“行为”定义职责分别分配给具有相同操作行为界面的通用接口的实现子类,利用多态性适应行为的可变性。
应用Polymorphism模式的好处
- - -
避免重复代码
避免重复的分歧条件
易扩展。只要实现了统一的通用接口,便可实现行为的扩展
Polymorphism模式的应用例
上面的例子:物体的移动行为,应用Polymorphism设计模式,它的类图便是:
如果我们需要扩展“移动”行为,只需简单地创建一个实现IRunner接口的类。 其他应用Polymorphism模式的例 设计模式之Command - 命令模式 [GoF] 设计模式之Strategy - 策略模式 [GoF]
Dependency Inversion Principle (DIP) - OO设计的依赖倒置原则
GRASP Pure Fabrication Pattern - GRASP之纯虚构模式
纯虚构模式(Pure Fabrication)是GRASP扩展模式之一,它把非问题领域中的职责分配给人工定义的类。
问题
非问题领域中的职责应该分配给谁?或者说,按照信息专家等模式分配职责时,存在某些不恰当的职责时,应该怎么做?
所谓不恰当的职责,是指难以分配的职责:在保证高内聚,低耦合的条件下,某些职责难以分配给现存的任何问题领域里的类。
Pure Fabrication模式所提倡的解决方案
Pure Fabrication模式提倡把那些非问题领域的职责分配给那些人工生成的或者容易此类职责的概念类。
Domain Class的概念
我们设计对象的时候应该尽量保持与现实世界里的对象一致。这种与现实世界里的对象保持一致的从业务分析中抽象出来的类叫做“Domain Class”。它相当于上述问题领域里的类。 比如一个简单的用例:用户注册。 用户就是一个“Domain Class”,它是现实世界里的业务对象。相当于这里的“问题领域里的类”。 用户注册需要操作数据库,【数据库操作】是系统功能实现的一个必需功能,它不是现实世界里存在的业务对象,它是一个非Domain Class。如果把【数据库操作】看作一个行为职责,它就相当于这里所说的“非问题领域里的职责”。 一般来说,Domain Class与非Domain Class的功能如果聚集在一个类里,就破坏了“高内聚”原则。
应用Pure Fabrication模式的好处
- - -
高内聚。不必分配问题领域以外的职责给各Domain类,从而保证各Domain类内部功能上的高度聚集性。
低耦合。问题领域以外的职责被分配给第三方非Domain类,一方面可以降低各Domain类之间的关联程度,另一方面可以比较漂亮地整合系统的各方面的职责。
重用性。各Domain类由于功能上的聚集与关联度的降低,可以更容易地得到重用。
Pure Fabrication模式的应用例