1. 目的
从Presenter 中分离出数据加载和响应Domain 层异步事件的逻辑,使Presenter 的逻辑处理更加简单。关于Presneter 的介绍可以参见Martin Fowler 的MVP 模式(最近好像已经分解成Supervising Controller和Passive 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 的代码:
- public class DataBinder implements DataChangedListener {
-
- private View view;
-
- private Rule rule;
-
- public DataBinder(View view) {
- this.view = view;
- }
-
- public void bind(Rule rule, Model model) {
- Object[] objects = model.getObjects(rule);
- view.setObjects(objects);
- this.rule = rule;
- model.addDataChangedListener(this);
- }
-
- public void detach(Model model) {
- model.removeDataChangedListener(this);
- }
-
- public void onObjectCreated(Object newObject) {
- if (rule.matches(newObject)) {
-
- }
- }
-
- public void onObjectModified(Object oldObject, Object newObject) {
- if (rule.matches(oldObject) && rule.matches(newObject)) {
-
- }
- }
-
- public void onObjectDeleted(Object object) {
- if (rule.matches(object)) {
-
- }
- }
- }
- 大小: 13.7 KB
- 大小: 9.4 KB
- 大小: 10.1 KB
分享到:
相关推荐
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)生成...
Generic Data Binder (GDB) for jQuery 提供双向数据绑定,GDB 能实时进行双向绑定视图和模块。GDB 是非常容易使用,零配置(除非你想要)的模版引擎和框架的小插件。 在线演示 标签:Generic
Gulp将合并文件并将其放在dist文件夹中,您可以使用data-binder.js和data-binder.min.js。 然后,您可以访问以获得检举。测试运行测试: gulp test待办事项:descripton文件## class:DataBinder成员 ## new ...
在 Meteorite 管理的应用程序目录中,输入: $ mrt add form-data-binder看到它在行动演示: : 代码: : 用法使用 session-bind 属性声明任何表单或输入 DOM 元素,并使用 Session 变量名称将其附加到。 < form ...
Chapter 4 Fundamental Data Types Chapter 5 Decisions Chapter 6 Loops Chapter 7 Arrays and Array Lists Chapter 8 Designing Classes Chapter 9 Inheritance Chapter 10 Interfaces Chapter 11 Input/Input and...
简单bower模块的boilerplate,clone本项目rm -rf .git按照自己模块的情况修改bower.json和package.jsongit init提交到repository
经过测试: HiKey 620 适用于... 我们通常使用/ data / local / tmp进行演示$ adb push binder-explorer_x86_64.tar.gz /data/local/tmp 输入您的设备adb shell: $ adb shell$ cd /data/local/tmp 本地提取.tar.
jupyterlab r数据挖掘活页夹此存储库保留针对库的MyBinder配置
适用于大数据分析的Python Python是用于开发软件和数据科学应用程序的流行编程语言。 它的流行源于许多因素,例如简单性,可读性,可移植性等。因此,与C或Fortran相比,Python速度较慢,并且不能很... 您可以在Binder
Bamboolib_binder_template:Bamboolib-用于创建自己的活页夹笔记本的模板
它们包含一个足以使Binder形成完整环境的environment.yaml或requirements.txt文件 它们可以在大约2GB的内存中快速安全地运行 他们具有良好的教育意义,并且涉及广泛关注的工具和主题 查找提供这些教程的教程演示者的...
使用R进行数据处理 该研讨会将以涵盖的材料为基础,介绍... 或者,您可以使用Binder在线运行笔记本: 评估 您的反馈对研究生院非常重要,因为我们一直在努力改善我们提供的培训。 在课程结束时,请完成评估表,为
NATS Spring支持 这个存储库包含两个核心包: nats-spring使用核心... spring.cloud.stream.bindings.input.destination=dataIn spring.cloud.stream.bindings.input.binder=nats1 spring.cloud.stream.binders.nats1
单击下面的Binder徽章,然后开始使用笔记本电脑。 请注意,您对笔记本所做的更改将不会保留! 不要忘记在结束Binder会话之前下载修改过的笔记本。 奖金 2- Repo2Docker 如果您仍然想在容器中工作,但又希望在...
Binder 28 Content Provider 29 Provider declaration 30 Other security consideration 33 Table of Contents [ii ] Broadcast Receiver 34 Receiver declaration 35 Secure sending and receiving broadcasts 36 ...
StateBinder StateBinder是用于视图状态管理的微型库... data class MainState ( val label : String , val errorText : String? ) : State 创建StateBinder: privateval stateBinder : StateBinder < MainState>
##第一部分: Android基础知识 Android内存泄漏总结 Handler内存泄漏分析及解决 Handler、Looper、Message、MessageQueue基础流程分析 Android性能优化 ListView详解 RecyclerView和ListView的异同 ...Data Binding(数
Android(安卓) Android基础知识 Android内存泄漏总结 Handler内存泄漏分析及解决 Handler、Looper、Message、MessageQueue基础流程分析 Android性能优化 ListView详解 ...Data Binding(数据绑定)用户指南
(D) 问我关于大规模数据分析的任何事情============================== 大规模数据分析教程 - SciPy US 2021日期:7 月 13 日下午 2 点到 6 点 CDTSciPy 美国 2021 欢迎来到(D)Ask Me Anything About Data Analytics...
在南极探测裂缝,以更安全,更高效地导航,... 为data2binder欢呼! 安装首先克隆此repo-url git clone <repo>cd nz_space_challengeconda env create -f environment.yml 运行jupyter笔记本 source activate nz_space_