.NET集成DeveloperSharp实现AOP

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

🏆作者:科技、互联网行业优质创作者
🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造
🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你快速成长。升职+涨薪!!

DeveloperSharp系列近期又被制造业ERP、民航飞行App、建筑BIM、电力掌上营业厅、等多家大型采用,站在巨人的肩膀上你能走的更远。

支持.Net Core2.0及以上,支持.Net Framework4.0及以上

【目录】
1.第一个AOP程序
2.Aspect横切面编程
3.一个横切面程序拦截多个主程序
4.多个横切面程序拦截一个主程序
5.AOP的泛型处理
6.AOP的异步处理
7.优势总结
8.展望

AOP(Aspect Oriented Programming)是“面向横切面编程”,主要是用来对程序/模块进行解耦。怎么理解??

我们可以把一般的编程理解为“纵向编程”(主程序),比如如下的一个示例代码:

        public string GetInfo(int i)
        {
            string s = "";

            if (i == 1)
                s = "A";
            else if (i == 2)
                s = "B";
            else if (i == 3)
                s = "C";
            else
                s = "Z";

            return s;
        }

试想一下,上述软件实际使用后,

  • 如果条件变量i有更多的判断值,我们是不是要在GetInfo()方法内部修改代码+重新编译?
  • 如果后续需要加个日志记录功能,我们是不是也要在GetInfo()方法内部加上日志函数+重新编译?
  • 如果...
  • 更多如果...

为了避免上述的这些麻烦并增加软件的灵活性,“横向编程”,也就是AOP被创造了出来,它就像是“横切一刀”,把相关功能塞进了主程序。

现行AOP的实现,主要是通过拦截方法(即拦截主程序),并修改其参数+返回值来完成。

网上有很多相关方案,比如:特性注释拦截、动态代码生成、派遣代理模式、等。但这些方案往往有如下缺点:
(1)实现的较复杂,使用上不算简便。
(2)只能用于特定上下文环境,比如只能用于Web Api。
(3)耦合度没完全切断、逻辑有变化时还是需要修改代码&重新编译。
(4)不成熟,在不同.NET版本下表现性状不同,只适合实验测试性项目,很难用于真实生产环境。
它们均不够理想。

而今天要隆重登场的主角-DeveloperSharp平台中的AOP技术,则提供了一种简便、快捷、彻底解耦的AOP实现。使用它,在程序逻辑有变化时,你只需要修改配置文件就行,而不再需要对主程序进行一丁丁点的代码修改!!

1.第一个AOP程序

制作一个AOP程序需要四个步骤:

(1)制作主程序

(2)制作横切面程序

(3)制作配置文件,让横切面程序拦截主程序

(4)调用主程序

下面,我们一步一步来实现上述四个步骤。

【第一步】:制作主程序

我们在Visual Studio中新建一个名为“School.Logic”的类库工程,并在该工程中新建一个名为PersonManage的类,该类中有一个名为GetInfo1的方法,代码如下:

//从NuGet引用DeveloperSharp包
using DeveloperSharp.Structure.Model;

namespace School.Logic
{
    //主程序必须继承自LogicLayer类
    public class PersonManage : LogicLayer
    {
        public string GetInfo1(string Name, int Num)
        {
            return $"共有{Name}{Num}人";
        }
    }
}

以上,编写了一个非常简单的主程序。

【第二步】:制作横切面程序

我们再在Visual Studio中新建一个名为“School.Aspect”的类库工程,并在该工程中新建一个名为Interceptor1的类,代码如下:

//从NuGet引用DeveloperSharp包
using DeveloperSharp.Structure.Model.Aspect;

namespace School.Aspect
{
    //横切面程序必须继承自AspectModel类
    public class Interceptor1 : AspectModel
    {
        //PreProcess方法先于主程序执行
        public override void PreProcess(object sender, AspectEventArgs e)
        {
            //把主程序的两个参数值改掉
            e.MethodInfo.ParameterValues[0] = "老师";
            e.MethodInfo.ParameterValues[1] = 20;
        }

        //PostProcess方法后于主程序执行
        public override void PostProcess(object sender, AspectEventArgs e)
        {
            
        }
    }
}

 以上,编写了一个横切面程序。它的主要功能是把主程序方法的两个参数值给改掉。
AspectModel基类中的PreProcess方法会在主程序方法执行之前被执行,而PostProcess方法会在主程序方法执行之后被执行。它两就是AOP横向拦截的核心要素。它两均需要被override重写覆盖掉。

【第三步】:制作配置文件,让横切面程序拦截主程序

若是在.Net Core环境下,我们创建一个名为DeveloperSharp.json的配置文件,设置让Interceptor1拦截PersonManage中的GetInfo1方法。文件内容如下:

{
  "DeveloperSharp":
  {
     "AspectObject":
     [
         {
           "name":"School.Aspect.Interceptor1",  //横切面拦截器类
           "scope":"School.Logic.PersonManage",  //被拦截的主程序类
           "method":"GetInfo1"                   //被拦截的方法
         }
     ]
  }
}

若是在.Net Framework环境下,我们创建一个名为DeveloperSharp.xml的配置文件,设置让Interceptor1拦截PersonManage中的GetInfo1方法。文件内容如下:

<?xml version="1.0" encod
.NET集成DeveloperSharp实现图片的裁剪、缩放、与加水印 DeveloperSharp系列近期又被制造业ERP、民航飞行App、建筑BIM、电力掌上营业厅、等多家大型采用,站在巨人的肩膀上你能走的更远。图片的裁剪、缩放、与加水印,是任何系统经常要用到的功能,它们现已集成到IUtility工具中,使用十分简便。(具体代码将在文末给出)——理清技术脉络、形成思维体系、获取最佳实践、框架开发能力。🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造。注意:X、Y坐标,是以图片左上角为原点而定,单位是像素。 阅读详情

相关推荐

.NET集成DeveloperSharp实现数据库操作

int affectedRows2 = IDA.SqlExecute("insert into t_Student(Name,Age)values(@N,@A)", new { N = "孙悟空", A = 200 });IDA.SpExecute("Test5", new { N = "杨小伟", B = "1999-02-28 12:03:45", h = 11.023, Id = 2 }, op1, op2, op3);

.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 1706

【愚公系列】2023年10月 .NET CORE工具案例-DeveloperSharp(数据库访问技术)

数据库访问技术是指访问和操作数据库的方法和技术。数据库访问技术主要有以下几种:SQL:SQL(Structured Query Language)是一种专门用于管理关系型数据库的语言,它可以用来进行数据的增删改查,以及对数据库表、视图等进行创建、修改和删除等操作。JDBC:JDBC(Java Database Connectivity)是一种用于在Java应用程序中访问数据库的API。它提供了一系列的接口和类,可以通过Java代码连接和操作各种数据库。

愚公智库 9629

.NET集成DeveloperSharp实现AOP(经典)

若是在.Net Core环境下,我们只需要把DeveloperSharp.json文件放到程序执行目录中(即bin目录下与dll、exe等文件的同一目录中,放错了位置会报错)(注意:有些.Net Core版本在Visual Studio“调试”时,不会在bin目录下生成全部的dll、exe,此时需要把此配置文件放在应用程序的“根目录”下)。它两就是AOP横向拦截的核心要素。正确的使用AOP,甚至能对传统的软件架构设计,产生颠覆性的影响,如超级战士出场一般,让所有人刮目相看,完全耳目一新!

.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 664

.NET集成DeveloperSharp生成分布式唯一ID

在某个大型电商系统A中,“订单”这类大数据(比如,每天产生1500万条订单)必定不会存储在1台数据库服务器中,而是分布式的存储在多台数据库服务器组成的一个集群中(比如,1000台数据库服务器组成一个集群)。若此时,另外一家公司的电商系统B,要与你家的电商系统A合并(甚至还有更多公司的C、D、E、等等),那么这些系统合并时“订单Id”出现重复的概率是很大的。经验:其实,无论是单机小型应用,还是多机大型分布式应用,从今天开始,你都应采用“分布式唯一Id”作为数据库中、每个表的“主键”。//产生分布式唯一Id。

.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 1716

.NET集成DeveloperSharp实现强大的AOP

若是在.Net Core环境下,我们只需要把DeveloperSharp.json文件放到程序执行目录中(即bin目录下与dll、exe等文件的同一目录中,放错了位置会报错)(注意:有些.Net Core版本在Visual Studio“调试”时,不会在bin目录下生成全部的dll、exe,此时需要把此配置文件放在应用程序的“根目录”下)。正确的使用AOP,甚至能对传统的软件架构设计,产生颠覆性的影响,如超级战士出场一般,让所有人刮目相看,完全耳目一新!这样的一个业务案例,你以前会怎么设计这个程序?

.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 1266

.NET集成DeveloperSharp实现AOP(经典+扩充)

(适用于.NET/.NET Core/.NET Framework,新增了程序集自动扫描)【目录】1.第一个AOP程序2.Aspect横切面编程3.一个横切面程序拦截多个主程序4.多个横切面程序拦截一个主程序5.AOP的泛型处理(扩充)6.AOP的异步处理(扩充)7.优势总结8.展望0.前言AOP(Aspect Oriented Programming)是“面向横切面编程”,主要是用来对程序/模块...

dotNET跨平台 300

.NET集成DeveloperSharp操作SqlServer数据库

注意:通过对DatabaseType属性的设定,提供了对所有种类数据库的支持(包括:MySql、Oracle、PostgreSQL、SqlServer、Sqlite、Firebird、达梦、以及人大金仓KingbaseES、神舟通用, 南大通用, 翰高, Access、等)🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造。最后,我们来谈谈如何调用存储过程。回复'面试',获取C#/.NET/.NET Core面试宝典。

.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 915

C#AOP(最经典实现

若是在.Net Core环境下,我们只需要把DeveloperSharp.json文件放到程序执行目录中(即bin目录下与dll、exe等文件的同一目录中,放错了位置会报错)(注意:有些.Net Core版本在Visual Studio“调试”时,不会在bin目录下生成全部的dll、exe,此时需要把此配置文件放在应用程序的“根目录”下)。它两就是AOP横向拦截的核心要素。正确的使用AOP,甚至能对传统的软件架构设计,产生颠覆性的影响,如超级战士出场一般,彻底改变战局,让所有人刮目相看,完全耳目一新!

.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 1079

【朝夕教育】2023年11月 .NET CORE工具案例-DeveloperSharp(Web服务负载均衡)

Web服务负载均衡是一种将Web服务请求分发到多个服务器上的技术,以提高系统的可靠性、可用性和性能。具体来说,它会将用户的请求分发到不同的服务器上,每个服务器只处理一部分请求,从而减轻单一服务器的负担,避免单点故障,并提高系统的响应速度和吞吐量。Web服务负载均衡可以实现多种算法,如轮询、加权轮询、随机、最少连接等。其中,轮询算法是最简单的一种,它将请求依次分发给每个服务器,直至所有服务器都获得请求。加权轮询算法则是在轮询的基础上,为每个服务器设置不同的权重,以更加合理地分配请求。

微软MVP Eleven 1万+

.NET中的AOP介绍

.NET中的AOP

Man_Humble 3492

【朝夕教育】2023年10月 .NET CORE工具案例-DeveloperSharp(数据库访问技术)

数据库访问技术是指访问和操作数据库的方法和技术。数据库访问技术主要有以下几种:SQL:SQL(Structured Query Language)是一种专门用于管理关系型数据库的语言,它可以用来进行数据的增删改查,以及对数据库表、视图等进行创建、修改和删除等操作。JDBC:JDBC(Java Database Connectivity)是一种用于在Java应用程序中访问数据库的API。它提供了一系列的接口和类,可以通过Java代码连接和操作各种数据库。

微软MVP Eleven 2万+

.Net全网最火RabbitMQ操作【强烈推荐】

【前言】本文自1年前的1.0版本推出以来,已被业界大量科技公司采用。同时也得到了.Net圈内多位大佬的关注+推荐,文章也被多家顶级.Net/C#公众号转载。现在更新到了7.0版本,更好的服务各位.Neter。【正文】支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac。RabbitMQ作为一款主流的消息队列工具早已广受欢迎...

zls365365的博客 428

.NET/C#大型项目研发必备(13)--DataAccess数据库访问技术(续)

常见的ORM技术(比如:Entity Framework,Dapper,SqlSugar,NHibernate,等…),它们不是在做Sql语句的程序化变种,就是在做Sql语句的面向对象化。缺点显而易见:把简单的Sql语句复杂化、不伦不类、非标的各家自定义语法、难以大规模统一应用… 而ADO.NET也存在操作复杂、不同类型数据库(SqlServer、MySql、Oracle、等)操作代码需要重构等缺点。 本文要介绍的主角-DeveloperSharp框架中的ORM数据库访问技术(续),则巧妙的规避了上述各种

首席架构师 ◆ 顶尖领航员 ◆ 研发金字塔 ◆ 互联网基础架构 1607

【朝夕教育】2023年11月 .NET CORE工具案例-DeveloperSharp(Redis缓存)

Redis是一个高性能的开源键值对存储系统,可以用作数据库、缓存、消息中间件等多种用途。Redis支持多种数据结构,包括字符串、哈希表、列表、集合和有序集合,可以对这些数据结构进行快速的读写操作。Redis还提供了一些高级特性,如事务、发布/订阅、Lua脚本等。Redis的作用和应用场景包括:缓存:Redis可以作为缓存来加速读取频繁的数据,在访问数据库之前将数据存储在Redis中,从而加快数据的响应速度。

微软MVP Eleven 504

.NET/C#大型项目研发必备(4)--数据库的读写分离

在某些大型应用系统中,往往需要把数据库的“读操作”与“写操作”分为两个数据库(甚至两组数据库)分开操作,以达到读写分离的目的。 要实现数据库的读写分离,只需在前述“数据库的负载均衡“这篇文章的内容上做两点修改即可实现: 一是在DeveloperSharp.xml配置文件中设置两个DatabaseCluster节点分别对应“读数据库”与“写数据库”。 二是建立两个“负载均衡器”类分别对应“读的DatabaseCluster节点”与“写的DatabaseCluster节点”。

首席架构师 ◆ 顶尖领航员 ◆ 研发金字塔 ◆ 互联网基础架构 2469

NET知识梳理—— AOP

Console.WriteLine($"{this.GetType().Name}统计方法{methodName}执行耗时{stopwatch.ElapsedMilliseconds}ms");Console.WriteLine($"用户已注册,Name:{user.Name},Password:{user.Password}");Console.WriteLine($"用户已注册,Name:{user.Name},Password:{user.Password}");//调用原始业务方法。

1964
上一篇: 这是我见过最好用的 .NET 权限管理系统
下一篇: .NET 7 开发的高性能 Web 网关代理
数字智慧化基地
博客等级 码龄15年 1694粉丝 132原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值