若框架同时使用了 DI 和链式过滤器(中间件)我们还需要 AOP 么

AOP和DI、Chained Filters/Middleware完全不是一个层面的模式。DI、Chained Filters是常见模式,用起来几乎毫无风险。AOP可以说是设计模式之王,因为它的目标几乎就是银弹(一次只需要考虑一个层面),但是,没有慎重规划最好不要在正式项目里滥用从实现上说,AOP要求的是在源代码级或目标代码级或者运行时级编织(Weave)代码。这就需要
改造/增强使用的语言,或者其运行时、编译器、链接器、加载器或动态修改自身的代码或使用另一个元语言来生成在用的语言源代码(transcompile) 【若框架同时使用了 DI 和链式过滤器(中间件)我们还需要 AOP 么】 支持AOP比较好的语言是Lisp族,因为Lisp做到以下两点之一比较方便一点
动态修改自己的程序动态修改eval的实现
■网友
AOP 是不是更倾向于在运行时解决问题?若是,会否造成低效?(e.g. Yii2 框架支持了一个非常灵活而强大的 behavior 语法。后因种种原因造成社区倾向于弃用此结构。)编译时也可以设计为AOP。设计良好不会低效。AOP 是否破坏封装?如果正交设计得不好可能会破坏封装。关键还是在于设计思路是否统一。DI 或/和 Middleware Pipeline 是否能够替代 AOP?不会替代还可以相互支持完善设计。AOP 所解决的特定问题究竟是什么?用在面向对象上就是为了解决继承体系带来的结构性固定的弊端。用另一个维度来保证代码的封装,重用,可扩展性。
■网友
哈哈,这个问题真是满是槽点啊! 首先AOP是编程范式,和运不运行时没关系; DI和你说的链式过滤器(应该是指node.js框架的那一套,类似J2EE的Filter)顶多是模式。DI和链式过滤器可以实现或支持部分AOP编程,说取代那就是不对了,链式过滤器也没法做到细粒度的AOP,它针对的是Request Process; DI只是解决依赖对象的构造松耦合,散落在世界各地的代码还是需要龙珠雷达去收集的,谢邀
■网友
errr…………不谢邀…………啥叫AOP…………啥叫Middleware Pipeline…………我就只知道个DI,但我也不知道为什么DI 可以解决面向对象中散落在各处的零散代码的实现问题…………
■网友
不是很同意上面几个人的看法。中间件和aop应该是同一个层面的,只不过aop的粒度更细而已


    推荐阅读