论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 ...
随机推荐
- #oracle恢复已被commit删除的内容
1.FLASHBACK QUERY 闪回到15分钟前 SELECT * FROM tablename AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '15' MINU ...
- 移动通信最先进的音频编解码器EVS及用好要做的工作
语音通信从最初的只有有线通信变成后来的有线通信与无线通信(移动通信)的竞争,当移动语音通信价格下来后有线语音通信明显处于逆势.如今移动语音通信的竞争对手是OTT(On The Top)语音,OTT语音 ...
- H5单张、多张图片上传
前言 今天我们聊一聊图片上传,单张Or多张 ,如今,各大图片上传插件数不胜数,例如:Jquery的 verupload.js,jQuery File Upload.Uploadify.jQuery.f ...
- Layer 使用
官网文档 http://layer.layui.com/mobile/api.html 1.需要添加jquery的引用然后是 loadExtentFile("css", " ...
- WebGL three.js学习笔记 纹理贴图模拟太阳系运转
纹理贴图的应用以及实现一个太阳系的自转公转 点击查看demo演示 demo地址:https://nsytsqdtn.github.io/demo/solar/solar three.js中的纹理 纹理 ...
- Git来操作GitHub~
设置用户名(设置一次 以后就不用再设置了) git config --global user.name 'taopanfeng' 设置邮箱(设置一次 以后就不用再设置了) git config --g ...
- Postgresql数据库部署之:Postgresql本机启动和Postgresql注册成windows 服务
1.初始化并创建数据库(一次即可) initdb \data --locale=chs -U postgres -W You can now start the database server u ...
- Spring Aop源码分析
最近看了SpringAop的源码实现 大概记录一下aop的源码流程 创建一个最简单的一个测试类 package com.zcg.learn.Test; import org.aopalliance. ...
- 第九周LINUX 学习笔记
基于GTID的mysql主从简单复制 一.简单主从模式配置步骤1.配置主从节点的服务配置文件1.1.配置master节点:[mysqld]binlog-format=ROWlog-bin=master ...
- 20190429 - 如何访问 macOS 的 httpd、mysql 等服务
问题:在局域网,通过其它机器访问 macOS 上的服务时,提示拒绝. 解决:将 macOS 防火墙 80.3306 端口打开. macOS 内置防火墙,也许开启了防火墙.Icefloor 是一个老牌的 ...