第13章基于MVC和RMI的分布式应用

上传人:ldj****22 文档编号:35975214 上传时间:2018-03-23 格式:PDF 页数:26 大小:287.71KB
返回 下载 相关 举报
第13章基于MVC和RMI的分布式应用_第1页
第1页 / 共26页
第13章基于MVC和RMI的分布式应用_第2页
第2页 / 共26页
第13章基于MVC和RMI的分布式应用_第3页
第3页 / 共26页
第13章基于MVC和RMI的分布式应用_第4页
第4页 / 共26页
第13章基于MVC和RMI的分布式应用_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《第13章基于MVC和RMI的分布式应用》由会员分享,可在线阅读,更多相关《第13章基于MVC和RMI的分布式应用(26页珍藏版)》请在金锄头文库上搜索。

1、 第 13 章 基于 MVC 和 RMI 的 分布式应用 MVC 是 Model- View- Controller 的简称,即模型- 视图- 控制器。MVC 是 Xerox PARC 在 20 世纪 80 年代为编程语言 Smalltalk- 80 发明的一种软件设计模式,至今已被广泛使用。 本章首先介绍 MVC 设计模式的概念,然后创建一个基于 MVC 的 Java 应用,并且在这 个 Java 应用中引入 RMI 框架,把模型作为远程对象分布到服务器端,把视图和控制器分布 到客户端,从而创建分布式的 Java 应用。 13.1 MVC 设计模式简介 MVC 把应用程序分成 3 个核心模块

2、:模型(Model) 、视图(View)和控制器 (Controller) ,它们分别担当不同的任务。如图 13- 1 所示显示了这几个模块各自的功 能及它们的相互关系。 图 13- 1 MVC 设计模式 1视图 视图是用户看到并与之交互的界面。视图向用户展示用户感兴趣的业务数据,并 能接收用户的输入数据,但是视图并不进行任何实际的业务处理。视图可以向模型查 询业务数据,但不能直接改变模型中的业务数据。视图还能接收模型发出的业务数据 更新事件,从而对用户界面进行同步更新。 2模型 模型是应用程序的主体部分。模型表示业务数据和业务逻辑。一个模型能为多个PDF 文件使用 “pdfFactory P

3、ro“ 试用版本创建 376 Java Netword Programming 视图提供业务数据。同一个模型可以被多个视图重用。 3控制器 控制器接收用户的输入并调用模型和视图去完成用户 的请求。当用户在视图上选择按钮或菜单时,控制器接收 请求并调用相应的模型组件去处理请求,然后调用相应的 视图来显示模型返回的数据。 如图 13- 2 所示, MVC 的 3 个模块也可以看做软件的 3 个层次,最上层为视图层,中间为控制器层,下层为模型 层。总地说来,层与层之间为自上而下的依赖关系,下层 组件为上层组件提供服务。视图层与控制器层依赖模型层 来处理业务逻辑和提供业务数据。此外,层与层之间还存 在

4、两处自下而上的调用,一处是控制器层调用视图层来显 示业务数据,另一处是模型层通知客户层同步刷新界面。 为了提高每个层的独立性,应该使每个层对外公开接口, 封装实现细节。 4MVC 处理过程 如图 13- 3 所示,首先用户在视图提供的界面上发出请求,视图把请求转发给控制 器,控制器调用相应的模型来处理用户请求,模型进行相应的业务逻辑处理,并返回 数据。最后控制器调用相应的视图来显示模型返回的数据。 图 13- 3 MVC 的处理过程 5MVC 的优点 首先,多个视图能共享一个模型。在 MVC 设计模式中,模型响应用户请求并返 回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和数据表示

5、分离, 同一个模型可以被不同的视图重用,所以大大提高了模型层的程序代码的可重用性。 图 13- 2 MVC 的 3 个模块也可以看做软件的 3 个层次 PDF 文件使用 “pdfFactory Pro“ 试用版本创建 Java Network Programming 377 第 13 章 基于 MVC 和 RMI 的分布式应用其次,模型是自包含的,与控制器和视图保持相对独立,因此可以方便地改变应 用程序的业务数据和业务规则。 如果把数据库从 MySQL移植到 Oracle, 或者把 RDBMS 数据源改变成 LDAP 数据源,只需改变模型即可。一旦正确地实现了模型,不管业务 数据来自数据库还是

6、 LDAP 服务器,视图都会正确地显示它们。由于 MVC 的 3 个模 块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的 松偶合的组件。 此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来连接不同的 模型和视图去完成用户的需求,控制器为构造应用程序提供了强有力的重组手段。给 定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型进行业务逻 辑处理,然后选择适当的视图将处理结果显示给用户。 6MVC 的适用范围 使用 MVC 需要精心的设计,由于它的内部原理比较复杂,所以需要花费一些时 间去理解它。将 MVC 运用到应用程序中,会带来额外的工作量,增

7、加应用的复杂性, 所以 MVC 不适合小型应用程序。 但对于开发存在大量用户界面,并且业务逻辑复杂的大型应用程序,MVC 将会使 软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建 MVC 框架时 会花费一定的工作量,但从长远角度看,它会大大提高后期软件开发的效率。 13.2 store 应用简介 本章介绍的 Java 应用实现了一个商店的客户管理系统, 本书把此应用简称为 store 应用。store 应用包含以下用例(Use Case) : l 创建新客户 l 删除客户 l 更新客户的信息 l 根据客户 ID 查询特定客户的详细信息 l 列出所有客户的清单 store 应用使用

8、 MySQL 数据库服务器,它的永久业务数据都存放在 STOREDB 数 据库,其中 CUSTOMERS 表用来存放客户信息,它的定义如下: create table CUSTOMERS ( ID bigint not null auto_increment primary key, NAME varchar(16) not null, AGE INT, ADDRESS varchar(255) ); STOREDB 数据库的创建过程可参见本书第 12 章的 12.2 节(安装和配置 MySQL 数据库) 。如图 13- 4 所示是 store 应用的类框图。其中 ConnectionPool

9、 接口、 ConnectionPoolImpl2 类、ConnectionProvider 类和 PropertyReader 类都来自于本书第 12 章。ConnectionPool 接口表示连接池,负责为模型提供数据库连接。StoreException 类PDF 文件使用 “pdfFactory Pro“ 试用版本创建 378 Java Netword Programming 是异常类,如例程 13- 1 所示是它的源程序: 图 13- 4 store 应用的类框图 例程 13- 1 StoreException.java package store; public class Store

10、Exception extends Exception public StoreException() this(“StoreException“); public StoreException(String msg) super(msg); 当模型层处理业务逻辑时出现错误,就会抛出 StoreException,例如: public void deleteCustomer(Customer cust) throws StoreException,RemoteException try if(!idExists(cust.getId() throw new StoreException(“Cu

11、stomer “+cust.getId()+“ not found“); String sql=“delete from CUSTOMERS where ID=“+cust.getId(); dbService.modifyTable(sql); fireModelChangeEvent(cust); catch(Exception e) e.printStackTrace(); throw new StoreException(“StoreDbImpl.deleteCustomern“+e); Customer 类与数据库中的 CUSTOMERS 表对应,它表示 store 应用的业务数据。

12、 模型层负责把 Customer 对象保存到数据库中,以及从数据库中加载特定的 CustomerPDF 文件使用 “pdfFactory Pro“ 试用版本创建 Java Network Programming 379 第 13 章 基于 MVC 和 RMI 的分布式应用对象。视图层则负责在图形界面上展示 Customer 对象的信息,以及接收用户输入的 Customer 对象的信息。如例程 13- 2 所示是 Customer 类的源程序。 例程 13- 2 Customer.java package store; import java.io.*; public class Custome

13、r implements Serializable private long id; private String name=“; private String addr=“; private int age; public Customer(long id,String name,String addr,int age) this.id=id; this.name=name; this.addr=addr; this.age=age; public Customer(long id) this.id=id; public Long getId() return id; public Stri

14、ng getName() return name; public void setName(String name) this.name=name; public String toString() return “Customer: “+id+“ “+name+“ “+addr+“ “+age; 在分布式运行环境中,Customer 对象会从服务器端传送到客户端,也会从客户端 传送到服务器端。 Customer 类实现了 java.io.Serializable 接口, 从而保证 Customer 对象 可以在网络上传输。 l store 应用包括 3 个核心接口。 l StoreView

15、接口:视图层的接口,负责生成与用户交互的图形界面。 l StoreController 接口:控制器层的接口,负责调用模型和视图。 l StoreModel 接口:模型层的接口,负责处理业务逻辑,访问数据库。 如例程 13- 3 所示是 StoreView 接口的源程序。它包括以下 3 个方法。 l addUserGestureListener(StoreController ctrl)方法:在视图中注册处理各种用户 动作(比如用户按下【查询客户】按钮)的控制器,参数 ctrl 指定控制器。 l showDisplay(Object display)方法:在图形界面上显示数据,参数 display 指定PDF 文件使用 “pdfFactory Pro“ 试用版本创建 380 Java Netword Programming 待显示的数据。 l handleCustomerChange()方法:当模型层修改了数据库中某个客户的信息时, 同步刷新视图的图形界面。 例程 13- 3 StoreView.java package store; import java.rmi.*; public interface StoreView extends Remote /* 注册处理用户动作的监听器,即 Stor

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号