array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Android三种常见软件架构MVC MVP MVVM - 爱码网

简析MVC MVP MVVM及区别

 

1、MVC:

MVCModel+View+Controller作为一种最为常规常见的设计模式,在Android开发历程初期被频繁使用。

 

设计原理:

  一个指令的下发和执行过程为,用户通过View发送指令给Controller,Controller去通知Model更新数据,Model层更新完数据直接响应到View

 Android三种常见软件架构MVC MVP MVVM

 

Android中使用场景:

   在MVC架构中,布局文件、xml作为MVC中的View层用于展示数据信息;Model指的是我们定义的JavaBeanUseCaseRepository等处理数据的相关对象,例如取数据库,网络请求;Controller则是Activity,例如点击“登录”按钮进行系统登录操作时,activity中定义onClick事件,通过HTTP请求网络判断用户信息准确性后进行Toast提示和页面跳转。

 Android三种常见软件架构MVC MVP MVVM

 

 

分析:

  使用MVC架构,我们可以较为简单,快速地实现我们想要的功能。然后在Android当中,由于xml中布局文件只能通过activity绑定的方式,因此相应实现View层控制也必须在Activity中操作,所以我们的activity既作为View层,同时又是Controller,也就是大量的逻辑处理需要在activity中完成,从而使得activity中的逻辑复杂而难于维护。同时也可以看到,在这种设计中View层与Model或者说所谓的Data层互知,两者之前耦合度较高,不利于后期的扩展和维护。

 

 

2、MVP

MVP,Model+View+Presenter模式,是现在项目开发中较为常见的一种设计模式。

设计原理:

   用户指令通过View下发,View层调用绑定的Presenter通知Model层做出相应的数据操作,完成后再由Presenter通过接口形式在View中显示

 Android三种常见软件架构MVC MVP MVVM

 

 

Android中使用场景:

  在MVP架构中,与MVC相同的是布局文件、xml作为MVC中的View层用于展示数据信息,而此时通常将相关的界面操作都抽象为接口形式,例如LoginActivity抽象为LoginView,供后续的Presenter调用;Model指的是我们定义的JavaBeanUseCase、等处理数据的相关对象,例如取数据库,网络请求,Presenter则是作为发送用户指令和直接更新界面的中间件。

     用户发送指令通过Presenter控制ModelUseCase去处理数据,数据更新后再由Presenter操作绑定的View接口使得继承该ViewActivityFragment或者控件显示数据变化。例如点击“登录”按钮进行系统登录操作时,activity中定义onClick事件,调用Presenter.login()方法,Presenter调用UserLoginUseCase去请求网络判断用户信息准确性后再通知Presenter调用LoginView.loginResult()使继承LoginView进行Toast提示和页面跳转。

 Android三种常见软件架构MVC MVP MVVM

 

 

分析:

  使用MVP架构,我们实现View层与数据层解耦,使用中间件去同步二者,提高层级的单一职能性与降低代码耦合,另外还有一个好处就是由于Model独立于View,我们可以推翻View层与Presenter层而不对Model有影响,使得我们在版本更新后维护过程中能够最大程度复用底层的逻辑结构。但是此模式依赖抽象接口,因此在开发过程中简单的逻辑仍然需要定义相应的接口去实现,并且当同类View层使用同一接口时可能部分activity就需要继承无谓的接口。

 

3、MVVM

MVVM,Model+View+ViewModel

设计原理:

  与MVP类似,用户指令通过View下发,View层通过Data Binging绑定的ViewModel通知,ViewModel操作Model进行完数据操作后,响应到ViewModel,由于ViewModelView绑定,VM中的数据更新之后会同步到View

 Android三种常见软件架构MVC MVP MVVM

 

 

 

相关文章: