3.2 MVC架构
这里只介绍JHotDraw框架的MVC模式. 关于MVC,扯开了三天三夜也说不完. 如MVC是什么, 为什么要用MVC, MVC的优点和缺点有哪些, 什么是改进的MVC等等等等, 这些问题你都可以Google一下, 这里只简单概述.
MVC发明于80年代,最早是运用在smalltalk上的. MVC试图将视图,控制器和模型分离,使之成为三个独立的部件以提高代码可复用率及可维护性.
视图:即肉眼看到的界面(官方的说法是:用户看到并与之交互的界面便为视图),视图只负责显示数据或其它可与用户交互的元件(按钮,菜单和链接等).
模型:模型是对现实数据和业务规则的模拟,也可以说是对数据和规则建模的结果. 模型为众多视图提供了数据来源. 对模型进行分离的最大好处就是一个模型可以被多个视图重用, 既减少了代码的重复量, 也提高代码的可维护度.
控制器:控制器接收用户的输入(操作)并调用模型和视图去完成用户的需求. 如博客网站中, 当用户编写完博客点击(页面上的)提交按钮时, 控制器接收请求并将请求交给相应的模型去处理, 而控制器本身对请求不做任何处理. 控制器发送完请求后, 根据模型返回的信息调用相应的视图显示处理的结果.
MVC的好处在于重用了大量的代码, 并且极大地提高了代码的可维护性. 比如在一个交友网站中, 如果你的数据从mySql迁移到noSql上, 你只需要修改模型的内部逻辑, 而无需修每个页面都需改.
再来看JHotDraw的MVC,
HelloApplication.java
import org.jhotdraw.app.Application;
import org.jhotdraw.app.DefaultApplicationModel;
import org.jhotdraw.app.SDIApplication;
public class HelloApplication {
public static void main(String[] args) {
Application app=new SDIApplication();
DefaultApplicationModel model=new DefaultApplicationModel();
model.setViewClass(HelloView.class);
app.setModel(model); app.launch(args);
}
}
首先是模型的建立(model)(即上面第8行代码). 这里的model不是业务逻辑的model, 而是应用程序的model. 它是在应用程序层次上对应用程序建模而来的. Model封装了程序名称, 程序版本号以及一系列的action(控制器)(model的详细构造将在下面的章节论述). model还存放了应用程序的视图(view)(第10行代码). 这样, 当程序运行时, application便调用model的getView()方法来获取视图并将其显示, 而用户通过点击控制器(按钮,菜单)激活控制器, 控制器将用户的操作传送给model处理, model将处理完之后, 显示相应的视图来告知用户的操作结果.
下面是应用JHotDraw框架的程序启动顺序图 (点击查看原图):