MVC软件体系结构
MVC体系结构
简单介绍
MVC(Model-View-Controller)结构即模型-视图-控制器
- View主要是呈现模型的状态数据,提供用户交互操作界面
- Controller处理用户输入(调控视图,访问模型的业务功能),控制业务流程(例如:输入密码后跳转到成功或失败界面)
- Model包含核心数据和业务功能,状态变更时,发送通知
- MVC逻辑结构示意图
MVC结构涉及设计模式的使用
- 策略模式
View委托Controller处理用户动作,对于View来说,Controller就是策略,多个Controller代表多个不同的处理策略,想换另一种策略即更换Controller - 组合模式
视图是各类组件的组合(如标签,窗口,文本输入等),顶层组件包含其他组件。 - 观察者模式
View和Controller充当观察者,注册到Model;Model充当被观察者,Model状态变更时,发送变更通知给View和Controller
- 基于Observer的MVC设计类图
- Model
- 系统的核心数据coreData,代表模型的状态
- 业务逻辑和计算功能service(),Controller根据用户需求调用提供的数据处理功能
- View或Controller获取数据 -> getData()
- attach(),detach(),供视图注册注销
- notify()当Model状态改变时,发送通知,使View同步Model的状态数据
- Controller
- 初始化对应的模型、视图
- handleEvent(),调用Model业务类型,更新Model数据,执行对View的调整和控制操作
- View
- display()呈现Model数据
- activate()激活控制方法,供Controller实施调控操作
MVC应用
Swing中的MVC
Swing组件使用了 MVC 变体,视图与控制器合成一个UI-delegate。UI Delegate定义了组件应该如何绘制,以及事件如何响应。
Swing的组件都包含一个JavaBean形式的属性model,它用于设置和获取模型。比如说,JSlider的模型是BoundRangeModel类定义的.Swing各个组件的模型在某一点上是共通的:如果开发者不自定义模型的话,组件会自己创建一个默认的模型,并且把这个模型安装在组件的内部。这些默认的组件有特定的命名方法,都是在模型名前增加前缀 Default。比如 JSlider默认的模型类是 DefaultBoundedRangeModel。组件调用 setModel方法可以把默认的模型替换掉。对于一些模型比较复杂的组件,比如 JTable和 JList,Swing提供了对应的模型抽象类,避免从0开始开发。这些类的前缀是 Abstract。比如说,JList的模型类有 ListModel, DefaultListModel和 AbstractListModel。
Struts中的MVC
SpringMVC中的MVC
SpringMVC实现Controller的方式
- 实现Controller接口
1 | public class Controller1 implements Controller { |
- 实现HttpRequestHandler接口
1 | public class Controller2 implements HttpRequestHandler { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 智码Moss!