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

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  
希望大家大胆的批评,我会虚心接受您的意见。

相关推荐

    Liquid.Studio2018 XMLtoXSD

    Liquid XML Data Binder现在支持为.Net Standard(1.6和2.0)生成C#和Visual Basic .Net源代码和项目文件。 10、XML Data Binder中的新 .Net Core支持 Liquid XML Data Binder现在支持为.Net Core(1.1和2.0)生成...

    binder原理

    3. **data**:联合体字段,包含了指向本地对象的指针或指向远程对象的句柄。 4. **cookie**:与本地对象关联的额外数据。 ##### 4.4 事务标志 事务标志(`transaction_flags` 枚举)定义了 Binder 事务的属性,...

    binder例子

    virtual android::status_t onTransact(int code, const android::Parcel& data, android::Parcel* reply, int flags) override; }; ``` 2. 实现服务端(Service):服务端需要在生命周期内将Binder对象绑定到服务...

    Android aidl Binder框架浅析

    **Android aidl Binder框架浅析** 在Android系统中,服务间的通信是通过Binder机制实现的,它是Android系统中进程间通信(IPC)的核心组件。Binder框架允许不同进程间的对象互相调用方法,使得数据和操作可以在不同...

    delphi中存取xml

    - 生成Delphi源代码:使用Delphi的“XML Data Binder”工具,将XSD文件转换为Delphi的.pas源代码文件。这将生成一组类,它们直接映射到XSD中的元素和复杂类型。 - 使用生成的类:在代码中实例化这些类,然后可以通过...

    Unity 调用默认的软件打开Excel表格

    除了直接使用C#的API,Unity还支持通过Unity Asset Store获取第三方插件,例如Excel Importer、Excel Data Binder等,它们提供更丰富的功能,比如直接在Unity中读取、写入Excel数据,无需每次都依赖外部软件。...

    gson2.7.jar

    它的全名是Google Simple Data Binder,版本2.7是其稳定且广泛使用的版本。标题中的"gson2.7.jar"正是这个库的二进制文件,可以被Java项目引入作为依赖来实现JSON操作。 Gson库的核心功能在于它提供了便捷的方法将...

    binder简单示例

    在这个例子中,`TestBinderServer.TestBinder`是服务器端 Binder 类的实例,客户端通过IBinder接口调用了`addData()`方法。值得注意的是,所有跨进程的数据交换都必须通过Parcelable接口,所以自定义的数据类型需要...

    Android核心剖析之Binder

    binder.transact(INTERFACE_TRANSACTION /*1000*/, data, null, 0); data.recycle(); } ``` 通过上述步骤,客户端成功调用了服务端的`start(String filePath)`方法,实现了进程间的数据传输与功能调用。 #### 四...

    c代码使用binder

    int (*transact)(struct binder_interface* interface, uint32_t code, const void* data, size_t size, void** reply, size_t* reply_size); } binder_interface; ``` 2. 实现Stub:接下来,服务端实现这个接口,...

    Android binder C++ service/client 实现. 共享内存

    在Android系统中,Binder是进程间通信(IPC,Inter-Process Communication)的主要机制,它使得应用程序和服务能够跨进程交换数据和执行操作。本教程将详细阐述如何使用C++实现一个基于Binder的服务(Service)和...

    Android的binder机制研究(C++部分)

    virtual status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = 0); }; ``` - **BpInterface**(代理对象): 在客户端进程中,定义`IMediaPlayerService`接口的代理对象...

    Android平台——Binder机制

    ### Android平台——Binder机制 #### 一、Binder机制概述 Binder机制是Android系统中用于实现跨进程通信(IPC)的核心技术之一。通过Binder机制,不同的应用程序和服务能够在不同的进程中相互通信,共享数据或请求...

    aidl跨进程通信demo,亲测可用,binder机制,改完bug

    void sendData(int data); } ``` 这将生成两个Java类:`IMyService`接口和`IMyService.Stub`抽象类。`Stub`类是 Binder 对象的实现,包含了服务端调用的方法;而`IMyService`接口则是客户端调用的接口。 2. **...

    mDemo-Binder机制学习

    - 隐式启动Service:通过Intent的Action、Category、Data等匹配Service,适用于跨应用通信。 8. **Binder性能优化** - 尽量减少Binder跨进程通信,避免大量数据传输,因为数据序列化和反序列化会影响性能。 - ...

    Binder Frequently Asked Questions

    3. **数据流(Data Flow)**:Binder提供了数据流动的机制,使得数据能够在组件之间自动传递,无需显式地管理数据传输过程。 4. **线程模型**:Binder处理多线程问题,确保在不同进程间的数据交换是线程安全的,...

    GenericDataBinder.zip

    Generic Data Binder (GDB) for jQuery 提供双向数据绑定,GDB 能实时进行双向绑定视图和模块。GDB 是非常容易使用,零配置(除非你想要)的模版引擎和框架的小插件。 在线演示 标签:Generic

    Android内核剖析之Binder

    例如,约定数据包`data`中的第一个数据为`filePath`,然后在`onTransact()`中读取并处理。同时,通过`code`变量来识别客户端期望调用的服务方法,这需要客户端和服务端之间有一组预定义的整数值来对应不同的服务函数...

    Android Binder入门学习笔记

    public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException { // ... 实现事务处理逻辑 } // ... 其他方法 } public static ...

    Android进程间通信-Binder机制

    ### Android进程间通信——Binder机制 #### 一、简要介绍和学习计划 在Android操作系统中,每一个应用程序通常由多个组件如Activity和服务(Service)组成。这些组件可能运行在同一进程中,也可能分布在不同进程中。...

Global site tag (gtag.js) - Google Analytics