摘要: 世界顶级7大管理法则:PDCA、SWOT、SMART、6W2H、WBS、28原则、四象限 一、PDCA 1. 步骤 P (plan) 计划,包括方针和目标的确定,以及活动规划的制定。 D (Do) 执行,根据已知的信息,设计具体的方法、方案和计划布局;再根据设计和布局,进行具体运作,实现计划中的内容 阅读全文
posted @ 2022-06-28 16:51 Johnny Li 阅读(1158) 评论(0) 推荐(0) 编辑
摘要: 本文主要讲述.Net Core对接Java密钥,使用RS256算法实现加签、摘要、验签,也是参考了网上的一些资料。 首先,java平台下的公钥和私钥,均采用的是base64String格式,而.net 平台下的,使用的是xmlString格式。所以第一步要实现这两者之间的转换。 我这里使用了一个常用 阅读全文
posted @ 2021-08-19 10:37 Johnny Li 阅读(1417) 评论(0) 推荐(0) 编辑
摘要: 引言 随着手机及移动设备的普及,移动端的应用也进入了热潮。以前PC端的门户网站,大多也均推出了适配移动设备的网站或者APP,再差的也注册了个公众号。在移动应用开发中,目前据我所了解到的解决方案有:1、原生态APP开发;2、适配移动设备的JS+HTML网站,套上跨平台的“马甲”;3、微信小程序及公众号 阅读全文
posted @ 2018-02-23 21:41 Johnny Li 阅读(569) 评论(3) 推荐(2) 编辑
摘要: 关于WPF/Silverlight的数据验证,想必大家都不陌生了。各大牛的博客里都不泛对这方面讨论的文章。个人比较赞赏 JV9的“Silverlight实例教程”里的Validation数据验证。本文是在大牛基础上做了个升级,其验证更加简单和方便。1、创建验证的基类public class Vali... 阅读全文
posted @ 2015-08-20 17:17 Johnny Li 阅读(625) 评论(0) 推荐(1) 编辑

开始

今天和大家聊聊AOP:面向切面编程思想。开始聊之前,先和大家一起从编程思想的发展说起。

编程思想的发展历程:

1、POP编程

首先,大家应该都知道,什么是POP编程吧,就是面向过程编程。关于这个编程思想就不做介绍了。

从思维上来讲,面向过程更强调细节,忽视了整体性和边界性。

典型代表是 C/C++的结构体。

POP的不足:

代码重用性低,不易扩展,维护起来难度大,耦合度比较高。

 

2、OOP编程

面向对象编程,把事物对象化,对象包含属性和方法,万物皆对象。

当规模不大,面向过程编程就可以了

最终实现业务,还是得面向过程,按照过程,把业务串起来。 

OOP的形式:一个模块由多个类组成,模块又组成某个服务,多个服务组成一个系统

业务变更,需要修改代码,类肯定要发生改变

但是类应该是固定的,不应该频繁被修改,甚至是不允许修改

从而引出了设计模式,就是为了解决这个问题。  

OOP的思想,对象组织,是以继承关系为主线,纵向的,有底到高。

OOP问题:

1)、共性问题,纵向思维,共性越多,接口就越多

2)、扩展问题,需要对现有的对像动态添加某种行为。

因此,由于OOP的问题,从而引出了AOP编程

 

3、AOP编程

所谓的AOP :面向切面编程,它是可以通过预编译的方式和运行期动态实现,在不修改源代码的情况下,给程序动态统一添加功能的技术。

OOP是关注将需求功能划分为不同的,相对独立的,封装良好的类,并让他们有自已的行为,依靠继顾,多态来定义彼此的关系。

AOP是希望能够将通用功能从不相关的类分离出来,能够使很多类,共享一个行为,这个行为,一旦发生变化,我们只需要修改这个行为就行了,而不需要去修改其他的类。

AOP的切面怎么理解呢?

橫切关注点:比如一个电商系统,处理一个订单,需要进行授权认证,订单处理,日志记录。。。更多操作;商品入库,也需要进行授权认证,入库处理,日志记录。。。更多操作。

OOP,程序都是通过类和接口组织的,核心业务逻辑采用OOP是很合理的。但对于横跨系统中多个模块的功能需求,就比较吃力了,比如日志处理,授权验证,统一的异常处理,性能统计等

而这些都有一个共同点,都是非业务的,非业务的功能代码,从业务代码中抽离出来,独立到非业务的功能代码中,这样我们改变这些行为时,就不会影响现有的业务逻辑代码

简单来说,AOP就是将通用功能抽取出来。面向切面,就是关注通用功能,而不关注业务,而我们的OOP是关注业务的,这就是它们的区别。

AOP实现原理:预先定义一组特性,使它具有拦截方法的功能,执行方法之前和之后做你想要做的事情,而这个的拦截关卡,就是所谓的切面 

过滤器,其实就是AOP的一种实现

AOP的优势:

1)、将通用功能从业务逻中抽离出来,提高代码的复用性,有利于后期的维护和扩展

2)、在软件设计时,抽出通用功能(抽出切面),降低架构的复杂度,这样在做系统时,只需要完成业务处理功能

 

4、AOP和OOP的区别:

1)、面向的目标不同:OOP面向的是名词领域(商品、对象、类),AOP面向的是动词领域(授权、验证、监控、埋点)

2)、思想结构不同:OOP是纵向结构,AOP是横向结构。

3)、注重的方面不同:OOP注重业务逻辑单元的划分;AOP偏重业务处理过程中某个步骤或者阶段的行为。

 

5、AOP和OOP的关系。

AOP其实是OOP的一个补充,它们都是编程思想,是相互弥补各自的不足,就犹如,OOP弥补POP的不足。

核心需求,仍然由OOP来实现,具体的业务,由POP来实现。而AOP就是为了让OOP更专注于业务的逻辑处理,它们都是相辅相成的

 

6、如何在代码里去实现AOP

这里就不过多的介绍了,实现在AOP的方式有很多种,通过设计模式就可以实现。

装饰器模式:允许向一个对象添加新的功能,同时又不改变其结构。

代理模式:一个类代表别一个类,然后向外界提供功能接口。

过滤器。

 

posted @ 2020-03-07 16:43 Johnny Li 阅读(702) 评论(0) 推荐(2) 编辑
摘要: 在工作中,会遇到需要多线程处理相应的业务需求,最典型的包括Socket的通信。 多线程处理里,就会考虑到,哪个线程先运行,哪个线程后运行的情况。 这里我介绍一下,使用ManualResetEvent类来对线程进行阻塞和继续操作。 它有三个重要的方法:Reset、Set和WaitOne。 1、首先介绍 阅读全文
posted @ 2020-02-13 19:15 Johnny Li 阅读(2309) 评论(0) 推荐(0) 编辑
摘要: 双重锁定: 静态初始化: 更多信息请参考:大话设计模式! 阅读全文
posted @ 2018-02-01 08:43 Johnny Li 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 小笔记:Timer定时间隔时间操作,后面有时间再补充和完善: 待完善。。。。。。 阅读全文
posted @ 2018-01-30 16:03 Johnny Li 阅读(2044) 评论(0) 推荐(0) 编辑
摘要: WPF最核心的技术优势之一就是数据绑定。数据绑定,可以通过对数据的操作来更新界面。 数据绑定最经常用到的是ObservableCollection<T> 和 Dictionary<T, T> 这两个类。 ObservableCollection表示一个动态数据集合,在添加项、移除项或刷新整个列表时, 阅读全文
posted @ 2017-06-14 16:30 Johnny Li 阅读(3931) 评论(3) 推荐(1) 编辑
摘要: USE [database] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[ProcedureName] ( @I_IndexID varchar(16), @I_PageIndex INT, @I_PageSize ... 阅读全文
posted @ 2016-04-19 09:59 Johnny Li 阅读(183) 评论(0) 推荐(1) 编辑
摘要: Model: [XmlRoot(ElementName = "root")] public class BookModel { [XmlElement] public string BookID { get; set; } [XmlElem... 阅读全文
posted @ 2016-01-20 12:25 Johnny Li 阅读(220) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示