原创: 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面向切面编程思想的更多相关文章

  1. 什么是AOP面向切面编程思想

    一.什么是AOP? 1.AOP不是一种语言,是一种编程范式 常见的编程范式: 面向过程.面向对象.函数式编程.事件驱动编程等 2.AOP可以解决特定问题,不能解决所有问题. 3.是面向对象的补充,不是 ...

  2. AOP面向切面编程的四种实现

     一.AOP(面向切面编程)的四种实现分别为最原始的经典AOP.代理工厂bean(ProxyFacteryBean)和默认自动代理DefaultAdvisorAutoProxyCreator以及Bea ...

  3. 【原创】Android AOP面向切面编程AspectJ

    一.背景: 在项目开发中,对 App 客户端重构后,发现用于统计用户行为的友盟统计代码和用户行为日志记录代码分散在各业务模块中,比如在视频模块,要想实现对用户对监控点的实时预览和远程回放行为进行统计, ...

  4. AOP(面向切面编程)大概了解一下

    前言 上一篇在聊MemoryCache的时候,用到了Autofac提供的拦截器进行面向切面编程,很明显能体会到其优势,既然涉及到了,那就趁热打铁,一起来探探面向切面编程. 正文 1. 概述 在软件业, ...

  5. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存

    代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...

  6. AOP面向切面编程C#实例

    原创: eleven 原文:https://mp.weixin.qq.com/s/8klfhCkagOxlF1R0qfZsgg [前言] AOP(Aspect-Oriented Programming ...

  7. 学习笔记: AOP面向切面编程和C#多种实现

    AOP:面向切面编程   编程思想 OOP:一切皆对象,对象交互组成功能,功能叠加组成模块,模块叠加组成系统      类--砖头     系统--房子      类--细胞     系统--人    ...

  8. Spring:AOP面向切面编程

    AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果. AOP是软件开发思想阶段性的产物,我们比较熟悉面向过程O ...

  9. java aop面向切面编程

    最近一直在学java的spring boot,一直没有弄明白aop面向切面编程是什么意思.看到一篇文章写得很清楚,终于弄明白了,原来跟python的装饰器一样的效果.http://www.cnblog ...

随机推荐

  1. nodejs-5.2 axios请求

    1.npm官方文档:https://www.npmjs.com/package/axios 2.axios:用于 浏览器 和 node.js的基于Promise的HTTP客户端 请求 特征 从浏览器制 ...

  2. create react app 项目部署在Spring(Tomcat)项目中

    网上看了许多,大多数都是nginx做成静态项目,但是这样局限性太多,与Web项目相比许多服务端想做的验证都很麻烦,于是开始了艰难的探索之路,终于在不经意间试出来了,一把辛酸... 正常的打包就不说了. ...

  3. jenkins+docker 持续构建非docker in docker

    工欲善其事必先利其器,为了解脱程序员的,我们程序员本身发明了很多好用的工具,通过各种工具的组合来达到我们想要的结果 本文采用jenkins docker svn maven作为相关工具,项目sprin ...

  4. 一步一步理解 python web 框架,才不会从入门到放弃 -- 简单登录页面

    上一节,我们基本了解了 Django 的一些配置,这一节,我们将通过一个简单的登录页面,进一步学习 Django 的使用. 新建项目 首先,新建一个 Django 项目,记得别弄错了哦. settin ...

  5. #利用openCV裁脸

    #利用openCV裁脸import cv2 def draw_rects(img, rects): for x, y, w, h in rects: cv2.rectangle(img, (x, y) ...

  6. .NET Core 迁移躺坑记

    最近将自己负责的一个核心接口系统从.Net Framework迁移到了.Net Core. 整体过程,从业务层面说一般般吧(整体还好但还是搞的业务有感,没出严重故障)但是技术层面上感觉其实并没有达到要 ...

  7. 为什么面试你要25K,HR只给你20K?

    周末了,我们来聊个轻松的话题,关于涨薪,哈哈~ 前阵子,栈长给大家分享了<为什么公司宁愿 25K 重新招人,也不给你加到 20K?>,今天我们来聊一个差不多的话题: 为什么面试你要25K, ...

  8. html5中的indexDB

    1.关系型数据库和非关系型数据库 一致性: 事务完成时,必须让所有的数据具有一致的状态,例如要写入100个数据,前99个成功了,结果第100个不合法,此时事务会回滚到最初状态.这样保证事务结束和开始时 ...

  9. 介绍几款 Python 类型检查工具

    近日,微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注. 微软在开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野心, ...

  10. 2018-01-12 Antlr4添加中文变量赋求值,括号,各种问题

    中文编程知乎专栏原文地址 例程(更多测试用例在此): 基数=100 基数×(基数+1)÷2 => 求值为5050 续上文Antlr4实现数学四则运算, 修改的语法规则部分: 程序: 声明+; 声 ...