您所在的位置:开发 > Java > Java网络编程精解之基于MVC和RMI的分布式应用二(5)

Java网络编程精解之基于MVC和RMI的分布式应用二(5)

2007-02-12 09:25 孙卫琴 51CTO.com 我要评论(0) 字号:T | T
一键收藏,随时查看,分享好友!

孙卫琴老师新作《Java网络编程精解》中的第十三章“基于MVC和RMI的分布式应用”,小编给它切分为一个小系列,共两篇文章。本文是其中的第二篇,具体内容包括创建控制器、创建模型、创建独立应用、创建分布式应用和小结以及学习完这一章后对自己的自测题,供大家参考!

AD:

13.8  小结

应用软件一般都包含界面、业务逻辑和业务数据。MVC设计模式把软件应用分为视图、控制器和模型3个模块,或者说3个层次。视图负责创建界面,并且在界面上展示数据,此外还能接收用户输入的数据。模型负责处理业务逻辑,模型一般会访问数据库,向数据库中查询、添加、更新或删除业务数据。控制器是视图与模型之间的调度枢纽,它根据用户的请求,调用模型去执行业务逻辑,并且调用视图去展示模型返回的响应结果。

本章的store应用为视图层、控制器层和模型层分别抽象出了StoreView、StoreController和StoreModel接口,层与层之间通过接口来交互,提高了各个层的独立性,并且削弱了层与层之间的耦合。由于视图、控制器和模型是各自独立的,因此可以方便地把它们分布到网络中的不同机器上。通常,模型是重用性最高的模块,它作为远程对象分布在服务器上,为多个客户端的视图提供服务。

13.9  练习题

1.以下哪些属于视图的任务?(多选)

A.展示数据   
B.选择视图显示响应结果
C.处理业务逻辑   
D.通知视图业务数据更新
E.接收用户的输入数据  
F.触发事件
G.调用模型响应用户请求

2.以下哪些属于控制器的任务?(多选)

A.展示数据   
B.选择视图显示响应结果
C.处理业务逻辑   
D.通知视图业务数据更新
E.接收用户的输入数据  
F.触发事件
G.调用模型响应用户请求

3.以下哪些属于模型的任务?(多选)

A.展示数据   
B.选择视图显示响应结果
C.处理业务逻辑   
D.通知视图业务数据更新
E.接收用户的输入数据  
F.触发事件
G.调用模型响应用户请求

4.MVC设计模式有哪些优点?(多选)

A.提高程序代码的可重用性
B.提高应用程序的灵活性和可配置性
C.软件规模越小,MVC设计模式越能缩短软件的开发周期
D.提高程序代码的可维护性

5.对于本章介绍的store应用,在运用RMI框架时,控制器层位于客户端还是服务器端?

A.客户端 
B.服务器端

6.在MVC设计模式中,哪个模块的可重用性最高?(单选)

A.视图  
B.控制器 
C.模型

7.参照本章13.2节的图13-5( 根据用户指定的ID查询客户详细信息的时序图),绘制出用户修改一个客户信息时的时序图。

8.参考本章的store应用,创建一个聊天系统。如图13-15所示是聊天系统的界面。

 

图13-15  聊天系统的界面

一个视图表示一个聊天用户的界面。模型被多个视图共享,所有视图都向模型注册自身,即模型持有所有视图的远程引用。模型负责消息的转发,此外,当一个新的用户登录到聊天系统中或从该系统中退出时,模型会通知所有视图刷新用户名单。模型位于服务器端,视图与控制器位于客户端。

如图13-16所示为用户Client1给用户Client2发送一条消息的时序图。

 

图13-16  用户Client1给用户Client2发送一条消息的时序图

模型层的接口ChatModel的定义如下:

import java.rmi.*;
public interface ChatModel extends Remote{
/** 登录一个聊天用户,为了简化程序,可以由该方法为用户分配一个临时的唯一的用户名,
*  如第一个登录的用户为“client0”,第二个登录的用户为“client1”,依次类推。
*/
public void registerClient(ChatView client)throws RemoteException;
/**  退出一个聊天用户*/
public void unregisterClient(ChatView client)throws RemoteException;
/** 转发消息,参数sendFrom表示发送者的用户名,参数sendTo表示接收者的用户名 */
public void transferMsg(String sendFrom,String sendTo,String msg) throws RemoteException;
}

以下是ChatModel接口的registerClient()方法的实现:

public void registerClient(ChatView client)throws RemoteException{
clients.add(client);   //clients为模型中存放所有视图的缓存
client.setName("client"+num++);  //为视图分配一个用户名,变量num为模型的一个实例变量
refreshChaters(); //通知所有视图刷新用户名单
}

答案:1.AEF   2.BG   3.CD   4.ABD   5.A   6.C

(责任编辑 火凤凰 sunsj@51cto.com  QQ:34067741  TEL:(010)68476636-8007)


内容导航

分享到:

网友评论TOP5

查看所有评论(

提交评论

  1. 专题:JVM编程语言,你的选择?
  2. 宅男程序员给老婆课程之11:域模型

文章排行

本月本周24小时

热点专题

更多>>

读书

游戏关卡设计
《半条命》作者倾心写就 暴雪总裁等业内专家强力推荐 盛大公司专业团队翻译 一起来创造引人入胜的游戏体验吧! 任何精彩游戏

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 移动互联网生活门户 灵客风LinkPhone