[译] MVP模式的14条规则
笔者在前文《MVP和MVC》中提到了两者的区别,以及MVP日趋流行的原因:即随着各种给力UI框架的发布,View的功能越来越强,已经足以完成一些简单的不需要与后台或其他view交互的event handling工作。
一位.NET工程师在他的博客写了MVP的14条规则,个人感觉十分靠谱,所以转载过来,并稍注翻译。
14条具体规则之前,他提到了一些MVP设计的基本共识,比如View必须实现Display接口,Display接口定义了View里面与Presenter交互的所有方法,通过Display的存在,View和Presenter得到完美的解耦,使得架构变得清晰,也为Presenter代码的测试带来极大的便利。View永远不直接调用任何其他模块或者服务,只专注于本身UI细节的实现,以及简单的不涉及与其他模块或服务交互的event处理。如果View需要Presenter提供数据或服务,则必须使用event。
1. All views should have a XxxView suffix: TaskView/ITaskView
2. All presenters should have a XxxPresenter suffix: TaskViewPresenter
3. Let the presenter do all use-case processing, but keep GUI control details in the view
让presenter处理所有的逻辑,把所有GUI以及GUI上控件反应的细节定义在view里面
4. All presenter methods called by the view must start with OnXxx() as they are events by design (MVP)
5. Calls from the view to the presenter should be kept at an absolute minimum, and used for "event" type calls only: _presenter.OnViewReady();
View对于Presenter的调用应该尽量少(应该尽量避免)
6. It is FORBIDDEN to use the presenter reference to access the model or services directly, no return values from presenter methods
禁止使用Presenter引用直接调用model或者服务,Presenter中定义的方法应该都没有返回值
7. Calls from the presenter to the view MUST go via the interface only
Presenter中调用View必须通过View的接口进行(View必须继承自接口,且View中可能被Presenter调用到的方法都要定义在这个接口中,Presenter中禁止出现View)
8. No methods in the view shall be public unless they are defined in the interface
View除了已经定义在Display(View的接口)以外的所有方法都应该是私有的(如果不能定义为私有,即Presenter可能要调用,那就应该定义到Display中,这一点和第7条相互印证)
9. It is FORBIDDEN to access the view from anywhere but the presenter, except for loading and showing the view from the CAB ModuleController
禁止从Presenter以外的任何地方调用View(即只有Presenter可以调用View/Display)
10. The interface methods shall have long meaningful names (not "SetDataSource") based on the domain language of the use-case
Display(View的接口)中定义的方法应该使用有具体意义的命名
11. The interface should contain methods only, no properties - afterall the presenter drives the use-case by calling methods, not by setting data
Display中应该只包含方法,不包含属性变量
12. All data in the MVP component should be kept in the model, no data should exist only as properties of UI controls
MVP模式中所有的数据都应该以model的形式出现,除此以外不应该有数据仅以UI属性变量的形式出现
13. The methods of the view interface should not contain UI control name references (e.g. AddExplorerBarGroup) as this makes the presenter know too much about the implementation technology of the view
Display中的方法不应该包含UI空间的名称,比如AddExplorerBarGroup,因为这样的方法名称会使得Presenter知道View里面的具体实现(这条感觉有点太牵强,不过注重细节才专业,才写得出完美的代码)
14. Stick with domain naming in the view methods (e.g. AddTaskGroupHeader), this makes the code easier to understand and the tests self-describing
View里面定义的方法同样应该有具体的意义,应该和这个方法中涉及到的UI空间或者相应的model名称结合起来
笔者补充几点,View和Presenter是单向的操作,View对Presenter一无所知,Presenter对其他的Presenter几乎一无所知,Presenter之间通过各种各样的event和event handler进行数据交互和服务调用。好的UI系统,所有涉及到2个或2个以上Presenter参与的数据或服务交互都必须由A方发出event,B方注册event handler来接收并处理,如果需要返回数据,则B方发出另一个event,A方注册该event的handler,诸如此类。
[译] MVP模式的14条规则的更多相关文章
- web前端性能14条规则
14条规则 1.减少Http请求 使用图片地图 使用CSS Sprites 合并JS和CSS文件 这个是由于浏览器对同一个host有并行下载的限制,http请求越多,总体下载速度越慢 2.使用CDN( ...
- 更好的 SQL 模式的 10 条规则
更好的 SQL 模式的 10 条规则 2015-06-17 11:57:392353浏览1评论 在创建新表和数据仓库时,要做很多决定.一些在当时似乎无关紧要的地方,却让你和用户在数据库的生命期内感到痛 ...
- [好文翻译]WEB前端性能优化的14条规则
作为一个半前端工程师,而且只会写点HTML5和CSS3的“假”前端工程师,为了能更好地理解一下前端的花花世界,最近拜读了<高性能网站建设指南>一书,对作者提出的前端性能优化的14个规则获益 ...
- Web前端性能优化的14条规则
1.减少Http请求 使用图片地图 使用CSS Sprites 合并JS和CSS文件 这个是由于浏览器对同一个host有并行下载的限制,http请求越多,总体下载速度越慢 2.使用CDN(内容发布网络 ...
- [译]Google官方关于Android架构中MVP模式的示例
概述 该示例(TODO-MVP)是后续各种示例演变的基础,它主要演示了在不带架构性框架的情况下实现M-V-P模式.其采用手动依赖注入的方式来提供本地数据源和远程数据源仓库.异步任务通过回调处理. 注意 ...
- [设计原则与模式] 如何理解TDD的三条规则
cp from : https://blog.csdn.net/ibelieve1974/article/details/54948031 如何理解Bob大叔的TDD三条规则?第一条和第三条讲的是 ...
- MVP模式
一.软件设计鼻祖MVC 1.1.MVC 第一次听到MVC这个名词是在C#中,相信对于MVC大家都已经很熟悉了,作为一种软件设计模式,MVC这个概念已经诞生好多年了. 如果你已经开发一段时间的iOS应用 ...
- [转]MVP模式开发
转自:http://www.jianshu.com/p/f7ff18ac1c31 基于面向协议MVP模式下的软件设计-(iOS篇) 字数9196 阅读505 评论3 喜欢11 基于面向协议MVP模式下 ...
- web前端-雅虎34条规则优化
1.尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是 ...
随机推荐
- 撩课-Java每天10道面试题第6天
51.HashMap的实现原理 HashMap的主干是一个Entry数组. Entry是HashMap的基本组成单元, 每一个Entry包含一个key-value键值对. HashMap基于hashi ...
- vi 多行注释和取消注释
注释 :1,10 s/^/#/ 注释1到10行 取消注释 ctl+v 进入visual block模式 选中 #号 按d 或x 将其删除
- 并发模型之Future设计模式
一.Futrue模式 客户端发送一个长时间的请求,服务端不需等待该数据处理完成便立即返回一个伪造的代理数据(相当于商品订单,不是商品本身),用户也无需等待,先去执行其他的若干操作后,再去调用服务器已经 ...
- Oracle数据库采用数据泵方式导入导出数据
特别说明:Oralce的数据泵导入导出技术只能用在数据库服务器上,在只有客户端的机器上是无法使用数据泵技术的. 1.创建备份文件目录 mkdir d:\dmp 2.在Oralce中注册该目录,将目录 ...
- Laravel之Ueditor
1.访问网址http://ueditor.baidu.com/website/download.html下载合适的编辑器版本 2.按照插件包中的index.html样式,布局页面 3.如果需要使用表单 ...
- 解决servlet在web.xml中的路径跳转问题
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" ...
- 中国国内 - 可用API合集
中国国内 - 可用API合集 收录一篇中国国内可用API合集,分享给大家 目录 笔记 出行 词典 电商 地图 电影 即时通讯 开发者网站 快递查询 旅游 社交 视频 天气 团队协作 图片与图像处理 外 ...
- Python scrapy 常见问题及解决 【遇到的坑】
1. 爬虫出现Forbidden by robots.txt 解决方法:setting.py ROBOTSTXT_OBEY = True 改成False 原因:scrapy抓包时的输出就能发现,在请求 ...
- 集合、深浅copy
集合set: 集合也和列表数组一样有增加,但是集合是真正的没有顺序的 所以集合无法查找的,并且集合的外观你看着好像是字典和列表的组合,因为它是用字典的括号一样 ,但是又是里面并没有键值对 只是一个 ...
- join语句中on条件与where条件的区别
大纲:on是在生成连接表的起作用,where是生成连接表之后对连接表再进行过滤 当使用left join时,无论on的条件是否满足,都会返回左表的所有记录,对于满足的条件的记录,两个表对应的记录会连接 ...