MVC设计模式
- MVC是三个单词的缩写,分别为: 模型(Model),视图(View)和控制Controller)。 MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑。 View层用于与用户的交互。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
- 1) 视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入。当然,如何你对Android了解的比较的多了话,就一定可以想到在Android中也可以使用JavaScript+HTML等的方式作为View层,当然这里需要进行Java和JavaScript之间的通信,幸运的是,Android提供了它们之间非常方便的通信实现。
- 2) 控制层(Controller):Android的控制层的重任通常落在了众多的Acitvity的肩上,这句话也就暗含了不要在Acitivity中写耗时代码,要通过Activity交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。
- 3) 模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在的该层的。就是应用程序中二进制的数据。
MVP设计模式
MVP
是从经典的模式
MVC
演变而来,它们的基本思想有相通的地方:
Controller/Presenter
负责逻辑的处理,
Model
提供数据,
View
负责显示。作为一种新的模式,
MVP
与
MVC
有着一个重大的区别:在
MVP
中
View
并不直接使用
Model
,它们之间的通信是通过
Presenter (MVC
中的
Controller)
来进行的,所有的交互都发生在
Presenter
内部,而在
MVC
中
View
会从直接
Model
中读取数据而不是通过
Controller
。
在
MVP
模式里通常包含
4
个要素:
(1)View:
负责绘制
UI
元素、与用户进行交互
(
在
Android
中体现为
Activity);
(2)View interface:
需要
View
实现的接口,
View
通过
View interface
与
Presenter
进行交互,降低耦合,方便进行单元测试
;
(3)Model:
负责存储、检索、操纵数据
(
有时也实现一个
Model interface
用来降低耦合
);
(4)Presenter:
作为
View
与
Model
交互的中间纽带,处理与用户交互的负责逻辑。
MVVM设计模式
MVVM 其实是一个MVC的增强版,并将表示逻辑从Controller移出放到一个新的对象里,即ViewModel。
组成部分Model、View、ViewModel
View:UI界面
ViewModel:它是View的抽象,负责View与Model之间信息转换,将View的Command传送到Model;
Model:数据访问层
View与ViewModule连接可以通过下面的方式
Binding Data:实现数据的传递
Command:实现操作的调用
AttachBehavior:实现控件加载过程中的操作
View没有大量代码逻辑。结合WPF、Silverlight绑定机制,MVP演变出了MVVM,充分利用了WPF、Silverlight的优势,将大量代码逻辑、状态转到ViewModel,可以说MVVM是专门为WPF、Silverlight打造的。
View绑定到ViewModel,然后执行一些命令在向它请求一个动作。而反过来,ViewModel跟Model通讯,告诉它更新来响应UI。这样便使得为应用构建UI非常的容易。往一个应用程序上贴一个界面越容易,外观设计师就越容易使用Blend来创建一个漂亮的界面。同时,当UI和功能越来越松耦合的时候,功能的可测试性就越来越强。
运用设计模式的思想
1、物理分离
将处理业务逻辑、
UI
布局、数据存储的代码进行物理分离,分别放在不同的文件中。
2、外部调用
不同的层之间交互一定是通过调用层的开放方法来实现,比如逻辑层不会调用
UI
层(
view
类)的父类方法,而是调用其自定义方法。
3、降低耦合
设计模式关系内容
在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。它们的耦合度依次增强。
依赖关系: 对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
关联关系: 分为单向关联和双向关联。在java中,单向关联表现为:类A当中使用了类B,其中类B是作为类A的成员变量。双向关联表现为:类A当中使用了类B作为成员变量;同时类B中也使用了类A作为成员变量。
聚合关系: 是关联关系的一种,耦合度强于关联,他们的代码表现是相同的,仅仅是在语义上有所区别:关联关系的对象间是相互独立的,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。
组合关系: 是一种耦合度更强的关联关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且“部分”单独存在时没有任何意义。
继承: 表示类与类(或者接口与接口)之间的父子关系。
实现: 表示一个类实现一个或多个接口的方法。