程序员
原文:https://mp.weixin.qq.com/s/8klfhCkagOxlF1R0qfZsgg面试
【前言】编程
AOP(Aspect-Oriented Programming)面向切面编程思想已经有多年历史了,可是在.Net里面一直没有获得重视,不过这在MVC框架后被变革了,AOP思想开始在.Net流行起来,各类框架组件里面,面向切面已是标配了,各类笔试面试的过程当中,更是不可或缺的!下面Eleven就来好好说说对AOP的理解,以及在.Net里面几种实现方式。设计模式
1【面向对象编程】缓存
面向对象编程OOP你们都耳熟能详,熟练的不能再熟练了,可是这真的是一个很伟大的设计思想!软件设计由于引入OOP而逐渐变得丰富起来。“一切皆为对象”的精义,使得程序世界所要处理的逻辑简化,开发者能够用一组对象以及这些对象之间的关系将软件系统形象地表示出来。而从对象的定义,进而到模块,到组件的定义,利用OOP的封装、继承、多态,让软件开发能够像建房那样按部就班,先烧砖(类)到砌墙(类库),从楼层(模块)到大厦(系统),甚至能够创建整个城市(互联网)!架构
在一些简单的小应用上,OOP可能还以为麻烦,可是在设计规模更大、逻辑更复杂的系统时,开发周期反而能变的更短。有了OOP,咱们才能化繁为简,用一种模式而后叠加,最终去创建大型复杂的系统,面向对象设计技术居功至伟。框架
2【OOP的问题】模块化
面向对象设计的惟一问题是,它本质是静态&封闭,任何需求的细微变化均可能对系统形成重大影响。常见的解决办法是设计模式(DesignPattern)。GOF将OOP设计经验总结为设计模式,让开发者能复用成功的设计和体系结构。设计模式解决特定的设计问题,使面向对象设计更灵活、优雅,最终复用性更好。然而,设计模式虽然给了咱们设计准则与典范,最大程度的利用面向对象特性,诸如利用封装、继承、多态,对责任进行分离、对依赖进行倒置,面向抽象,面向接口,最终设计出灵活、可扩展、可重用的类库、组件,乃至于整个系统的架构。在设计的过程当中,经过各类模式体现了对象的行为,暴露的接口,对象间关系,以及对象分别在不一样层次中表现出来的形态。然而鉴于对象封装的特殊性,“设计模式”的触角始终在接口与抽象中大作文章,而对于对象内部则无能为力。spa
3【AOP面向切面编程】设计
AOP刚好能够作到这个!它支持动态修改OO模型,能在不破坏封装的前提下,动态的扩展功能!就像现实世界中,对象也会在其生命周期中不断变化,应用程序也能够拥有新的功能。AOP剖解开封装的对象内部,将那些分散在多个类的共同行为封装成一个可重用模块,并将其名为“Aspect”,就是将那些与业务无关,却为业务模块所共同调用的逻辑,如事务、日志、权限、缓存等封装起来,能够减小系统的重复代码,下降模块间的耦合度,并有利于将来的可操做性和可维护性。
因为软件系统愈来愈复杂,大型的企业级应用愈来愈须要人们将核心业务与公共业务分离。AOP能支持分离通用服务造成统一功能架构,可以将应用程序中的业务逻辑和通用服务进行分离,让开发人员专一于企业的核心业务逻辑,通用逻辑经过AOP的方式统一提供!
4【AOP优点】
AOP实际上是OOP的补充和完善。OOP引入封装、继承和多态性等概念来创建一种对象层次结构,用以模拟公共行为的一个集合。当咱们须要为分散的对象引入公共行为的时候,OOP则显得无能为力。而AOP却能作到把动态修改对象,将通用功能注入!
AOP前:权限/异常/日志/缓存功能须要写入每一个具体的业务功能模块,AOP后:权限/异常/日志/缓存功能封装成独立的模块,能动态提供给不一样的业务模块。具体分析,OOP程序设计结合上AOP,优点主要表如今:
一、将通用功能从业务逻辑中抽离,能够避免大量重复代码(不须要处处都写),有利于代码维护升级,也有利于项目的规范化开发(通用功能再也不是各写各样);
二、AOP有利于软件设计的模块化,下降软件架构的复杂度。能把通用功能抽出来,那么在系统设计时就只须要专一于业务逻辑开发设计(再也不操心通用功能)。
【结语】
大谈了一篇纯理论性的东西,不知道小伙伴儿们能get多少,后续会更新多篇Demo,从C#的具体实现来看看AOP的效果。欢迎关注公众号,欢迎讨论,欢迎转发,愿天下有需求的人都能看到!
欢迎关注公众号【程序员在职场】获取更多干货~