`
wangyonghe
  • 浏览: 42253 次
社区版块
存档分类
最新评论

Data Binder

阅读更多

1. 目的

从Presenter 中分离出数据加载和响应Domain 层异步事件的逻辑,使Presenter 的逻辑处理更加简单。关于Presneter 的介绍可以参见Martin Fowler 的MVP 模式(最近好像已经分解成Supervising ControllerPassive View 两个模式,我还怎么看懂)。

2. 适用性

该模式主要适用于多客户端需要数据同步的系统中。

3. 结构

说明:

1) Model:该模型Swing 中的Model 类似,负责提供数据,一般在实现时,这个Model 应该是Domain 层的相关接口,如果用Java 的RMI 实现,它一般是一个远程接口。

2) View:就是一般View,负责展现数据和响应用户操作,和其它模式中的View 一样。

3) DataBinder:它是该模式的核心,负责从Model 中查询数据,将查询出的数据更新到View;并且负责监听Doamin 层中数据的变化,实时更新到View 中。

4) Rule:它封装了数据的规则。

5) DataChangedListener:它就不用介绍了,就是一般的监听器。

4. 协作

由Action 调用DataBinder 的bind 方法,产生下图的执行流程。

由Domain 层的异步事件驱动,产生下图的执行流程:

5. 实现

DataBinder 的代码:

 
  1. public class DataBinder implements DataChangedListener {
  2. private View view;
  3. private Rule rule;
  4. public DataBinder(View view) {
  5. this.view = view;
  6. }
  7. public void bind(Rule rule, Model model) {
  8. Object[] objects = model.getObjects(rule);
  9. view.setObjects(objects);
  10. this.rule = rule;
  11. model.addDataChangedListener(this);
  12. }
  13. public void detach(Model model) {
  14. model.removeDataChangedListener(this);
  15. }
  16. public void onObjectCreated(Object newObject) {
  17. if (rule.matches(newObject)) {
  18. // Notify view.
  19. }
  20. }
  21. public void onObjectModified(Object oldObject, Object newObject) {
  22. if (rule.matches(oldObject) && rule.matches(newObject)) {
  23. // Notify view.
  24. }
  25. }
  26. public void onObjectDeleted(Object object) {
  27. if (rule.matches(object)) {
  28. // Notify view.
  29. }
  30. }
  31. }

  • 大小: 13.7 KB
  • 大小: 9.4 KB
  • 大小: 10.1 KB
分享到:
评论
8 楼 zhufanamo 2006-12-29  
mmd 果然是一个公司出来的.做的东西都差不多.看看me 在这写的formbinder 哈哈哈
7 楼 wangyonghe 2006-12-29  
shaucle 写道
和swing的区别又在哪?
不明白你要和Swing 的什么东西相比较,

如果是和Swing 的设计模式相比的话,还是有一些差别的,其实Swing 的设计模式也并有是完全的MVC,
你可以看看
http://java.sun.com/products/jfc/tsc/articles/architecture/
里面有很详细的描述,
6 楼 shaucle 2006-12-29  
和swing的区别又在哪?
5 楼 wangyonghe 2006-12-29  
呵呵,可能这里做客户端的人很少吧,看样我在这里建Blog 建错了呀。

模式需要多练习呀,我总结出的一些模式都是以前开发时应用到的,现在我正在整理一份客户端开发的模式汇总,里面有很多使用的描述,有助于初学者掌握模式。

Controller 是MVC 中的概念,在MVP 中已经变成Presneter了,我的Binder 只是从Presenter 中分解出的,实质Presenter 和Binder 都是Controller,只不过是一个新的概念。

其实掌握模式的关键不在于它的概念,关键在于它的分解策略和各自己的关系,概念仅仅是一种表现方式而已,心中明白就可以了。
4 楼 shaucle 2006-12-29  
好像楼主的帖只有俺回...

Martin Fowler 的MVP 相当不错,
只有光看没啥用,太多了,还得多多练习


试问一下这个Binder和Controller 的区别?
和swing的区别又在哪?
3 楼 wangyonghe 2006-12-28  
是不是大家都休息了呀?没人回帖子呀?
2 楼 wangyonghe 2006-12-28  
很多人看了,怎么没人参与讨论呀?
1 楼 wangyonghe 2006-12-28  
希望大家大胆的批评,我会虚心接受您的意见。

相关推荐

Global site tag (gtag.js) - Google Analytics