论AOP面向切面编程思想
原创: eleven
原文: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设计经验总结为设计模式,让开发者能复用成功的设计和体系结构。设计模式解决特定的设计问题,使面向对象设计更灵活、优雅,最终复用性更好。然而,设计模式虽然给了我们设计准则与典范,最大程度的利用面向对象特性,诸如利用封装、继承、多态,对责任进行分离、对依赖进行倒置,面向抽象,面向接口,最终设计出灵活、可扩展、可重用的类库、组件,乃至于整个系统的架构。在设计的过程中,通过各种模式体现了对象的行为,暴露的接口,对象间关系,以及对象分别在不同层次中表现出来的形态。然而鉴于对象封装的特殊性,“设计模式”的触角始终在接口与抽象中大做文章,而对于对象内部则无能为力。

3【AOP面向切面编程】
AOP恰好可以做到这个!它支持动态修改OO模型,能在不破坏封装的前提下,动态的扩展功能!就像现实世界中,对象也会在其生命周期中不断变化,应用程序也可以拥有新的功能。AOP剖解开封装的对象内部,将那些分散在多个类的共同行为封装成一个可重用模块,并将其名为“Aspect”,就是将那些与业务无关,却为业务模块所共同调用的逻辑,如事务、日志、权限、缓存等封装起来,可以减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
由于软件系统越来越复杂,大型的企业级应用越来越需要人们将核心业务与公共业务分离。AOP能支持分离通用服务形成统一功能架构,能够将应用程序中的业务逻辑和通用服务进行分离,让开发人员专注于企业的核心业务逻辑,通用逻辑通过AOP的方式统一提供!
4【AOP优势】
AOP其实是OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。而AOP却能做到把动态修改对象,将通用功能注入!

AOP前:权限/异常/日志/缓存功能需要写入每个具体的业务功能模块,AOP后:权限/异常/日志/缓存功能封装成独立的模块,能动态提供给不同的业务模块。具体分析,OOP程序设计结合上AOP,优势主要表现在:
1、将通用功能从业务逻辑中抽离,可以避免大量重复代码(不需要到处都写),有利于代码维护升级,也有利于项目的规范化开发(通用功能不再是各写各样);
2、AOP有利于软件设计的模块化,降低软件架构的复杂度。能把通用功能抽出来,那么在系统设计时就只需要专注于业务逻辑开发设计(不再操心通用功能)。
【结语】
大谈了一篇纯理论性的东西,不知道小伙伴儿们能get多少,后续会更新多篇Demo,从C#的具体实现来看看AOP的效果。欢迎关注公众号,欢迎讨论,欢迎转发,愿天下有需求的人都能看到!

欢迎关注公众号【程序员在职场】获取更多干货~
论AOP面向切面编程思想的更多相关文章
- 什么是AOP面向切面编程思想
一.什么是AOP? 1.AOP不是一种语言,是一种编程范式 常见的编程范式: 面向过程.面向对象.函数式编程.事件驱动编程等 2.AOP可以解决特定问题,不能解决所有问题. 3.是面向对象的补充,不是 ...
- AOP面向切面编程的四种实现
一.AOP(面向切面编程)的四种实现分别为最原始的经典AOP.代理工厂bean(ProxyFacteryBean)和默认自动代理DefaultAdvisorAutoProxyCreator以及Bea ...
- 【原创】Android AOP面向切面编程AspectJ
一.背景: 在项目开发中,对 App 客户端重构后,发现用于统计用户行为的友盟统计代码和用户行为日志记录代码分散在各业务模块中,比如在视频模块,要想实现对用户对监控点的实时预览和远程回放行为进行统计, ...
- AOP(面向切面编程)大概了解一下
前言 上一篇在聊MemoryCache的时候,用到了Autofac提供的拦截器进行面向切面编程,很明显能体会到其优势,既然涉及到了,那就趁热打铁,一起来探探面向切面编程. 正文 1. 概述 在软件业, ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...
- AOP面向切面编程C#实例
原创: eleven 原文:https://mp.weixin.qq.com/s/8klfhCkagOxlF1R0qfZsgg [前言] AOP(Aspect-Oriented Programming ...
- 学习笔记: AOP面向切面编程和C#多种实现
AOP:面向切面编程 编程思想 OOP:一切皆对象,对象交互组成功能,功能叠加组成模块,模块叠加组成系统 类--砖头 系统--房子 类--细胞 系统--人 ...
- Spring:AOP面向切面编程
AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. AOP是软件开发思想阶段性的产物,我们比较熟悉面向过程O ...
- java aop面向切面编程
最近一直在学java的spring boot,一直没有弄明白aop面向切面编程是什么意思.看到一篇文章写得很清楚,终于弄明白了,原来跟python的装饰器一样的效果.http://www.cnblog ...
随机推荐
- Java开源生鲜电商平台-安全设计与架构(源码可下载)
Java开源生鲜电商平台-安全设计与架构(源码可下载) 说明:Java开源生鲜电商平台是一个B2B的生鲜电商平台,由于是APP的一种模式,所以安全方面一般会思考以下几个维度: 1.数据安全. 2.传输 ...
- 记一次logback传输日志到logstash根据自定义设置动态创建ElasticSearch索引
先说背景,由于本人工作需要创建很多小应用程序,而且在微服务的大环境下,服务越来越多,然后就导致日志四分五裂,到处都有,然后就有的elk,那么问题来了 不能每个小应用都配置一个 logstash 服务来 ...
- Docker 发布 Abp net core web 服务
Docker 发布 Abp net core web 服务 准备工作:Abp 项目,这个是模板下载地址 https://aspnetboilerplate.com/Templates (本例使用的是S ...
- Vue.js-08:第八章 - 组件的基础知识
一.前言 在之前的学习中,我们对于 Vue 的一些基础语法进行了简单的了解,通过之前的代码可以清晰的看出,我们在使用 Vue 的整个过程,最终都是在对 Vue 实例进行的一系列操作. 这里就会引出一个 ...
- [区块链] 拜占庭将军问题 [BFT]
背景: 拜占庭将军问题很多人可能听过,但不知道具体是什么意思.那么究竟什么是拜占庭将军问题呢? 本文从最通俗的故事讲起,并对该问题进行抽象,并告诉大家拜占庭将军问题为什么在区块链领域作为一个重点研究问 ...
- Linux - 修改系统的max open files、max user processes (附ulimit的使用方法)
目录 1 问题说明 2 修改max open files 3 修改max user processes 4 附录: ulimit命令说明 1 问题说明 Linux 系统默认的max open file ...
- 已实现乐观锁功能,FreeSql.DbContext 准备起航
上回说到 FreeSql.DbContext 的规则,以及演示它的执行过程,可惜当时还不支持"乐观锁",对于更新数据来讲并不安全. FreeSql 核心库 v0.3.27 已提供乐 ...
- 原生js查询、添加、删除类
1.添加类 为标签添加一个class的类 如:<div id="box" class="box">内容</div> document.g ...
- 解决 Vue 动态生成 el-checkbox 点击无法赋值问题
博客地址:https://ainyi.com/68 最近遇到一个问题,在一个页面需要动态渲染页面内的表单,其中包括 checkbox 表单类型,并且使用 Element 组件 UI 时,此时 v-mo ...
- Hystix熔断解决雪崩问题
1.线程隔离,服务降级(服务的消费方做降级处理) 当服务繁忙时,如果服务出现异常,不是粗暴的直接报错,而是返回一个友好的提示,虽然拒绝了用户的访问,但是会返回一个结果. 这就好比去买鱼,平常超市买鱼会 ...