MVVM+MVP+MVC

架构 MVC、MVP、MVVM 烂大街的问题,一般会问它们的优缺点各是什么?

架构设计的目的

通过设计使程序模块化、组件化,从而做到高内聚低耦合,让开发者能更专注于功能实现本身,提供程序开发效率、更容易进行测试、维护和定位问题等等。而且,不同的规模的项目应该选用不同的架构设计。

MVC

Model-View-Controller,是一种分层解偶的框架

Model层提供本地数据和网络请求,View层处理视图,Controller处理逻辑

缺点是Controller层和View层的划分不明显,Model层和View层的存在耦合

MVP

Model-View-Presenter,是对MVC的升级,Model层和View层与MVC的意思一致,

但Model层和View层不再存在耦合,而是通过Presenter层这个桥梁进行交流

通过view和p层即Presenter的相互持有,p调用model,将逻辑方法抽象成接口,presenter中去具体实现,view层只是调用p的方法;

优点是模型视图完全分离,presenter中的方法可以重用,缺点是presenter与view联系紧密,视图改变,presenter也要随之改变,实现方法过多,不易维护

MVVM

Model-View-ViewModel,不同于上面的两个框架,ViewModel持有数据状态,当数据状态改变的时候,会自动通知View层进行更新。

缺点

  1. 数据绑定也使得bug很难被调试。
    比如你看到页面异常了,有可能是你的View的代码有bug,也可能是你的model的代码有问题。数据绑定使得一个位置的Bug被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了。

  2. 数据双向绑定不利于代码重用。客户端开发最常用的是View,但是数据双向绑定技术,让你在一个View都绑定了一个model,不同的模块model都不同。那就不能简单重用view了

  3. 一个大的模块中model也会很大,虽然使用方便了也很容易保证数据的一致性,但是长期持有,不释放内存就造成话费更多的内存

AOP面向切面编程

切面(Aspect):指的就是通用功能的代码实现,比如我们上面演示的时间记录切面,日志切面,它们都是普通的Java类:TimeRecordingAspect和LogAspect。

目标对象(Target):要被织入切面的对象,例子中的CtripBookingService,有了AOP,它们可以专注于核心业务逻辑代码了!

切入点(Pointcut):定义通知应该切入到什么地方,Spring支持的切入点就是方法调用,切入点的定义可以使用正则表达式,用以描述什么类型的方法调用。@Pointcut就是用来定义切入点的。

通知(Advice):切面是一个类,而通知就是类里的方法以及这个方法如何织入到目标方法的方式(用@AfterReturning和@Around标注的方法)。我们的例子中只展示了两类通知,根据织入到目标方法方式的不同,一共可以分为5种:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值