当前位置: 首页 > news >正文

杭州 做网站建设部网站造价咨询

杭州 做网站,建设部网站造价咨询,建设网站方法有哪些内容,个人游戏网站备案前言上一篇在聊MemoryCache的时候#xff0c;用到了Autofac提供的拦截器进行面向切面编程#xff0c;很明显能体会到其优势#xff0c;既然涉及到了#xff0c;那就趁热打铁#xff0c;一起来探探面向切面编程。正文1. 概述在软件业#xff0c;AOP为Aspect Oriented Prog… 前言上一篇在聊MemoryCache的时候用到了Autofac提供的拦截器进行面向切面编程很明显能体会到其优势既然涉及到了那就趁热打铁一起来探探面向切面编程。正文1. 概述在软件业AOP为Aspect Oriented Programming的缩写意为面向切面编程通过预编译方式和运行期间动态代理实现程序功能统一维护的一种技术。AOP是OOP(面向对象程序设计)的延续是软件开发中的一个热点是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离从而使得业务逻辑各部分之间的耦合度降低提高程序的可重用性同时提高了开发的效率。---来自百度百科总结优点对业务逻辑的各个部分进行隔离业务之间耦合度降低提高程序的可重用性同时程序更容易维护提高开发效率不用花大量的时间在业务中增加代码还能降低风险其实AOP的本质就是动态代理何为动态代理呢动态代理就是在程序运行时创建目标对象的代理对象并对目标对象中的方法进行功能性增强的一种技术。通俗一点来说就是在运行期间对方法的拦截在方法执行前后进行额外的业务处理从而在不嵌入原有代码逻辑情况下就能增强被拦截方法的业务能力。理论先到这一起来看看用代码怎么实现吧2. 实践检验真理(到底优不优秀)先来一个控制台项目什么都没有从头开始撸代码先来看看项目结构老案例了还是假装在进行用户维护模拟对用户进行增删改查。这次就直接上代码啦啊根据项目结构依次看看代码在AopModel中增加User.cspublic class User {public string Name { get; set; }public int Age { get; set; } } 在AopService中增加IUser.cs和User.csIUserService.cspublic interface IUserService {bool AddUser(User user); } UserService.cspublic class UserService : IUserService {public bool AddUser(User user){Console.WriteLine(用户添加成功);return true;} } Main方法class Program {static void Main(string[] args){Console.WriteLine(原始需求);User user  new User { Name  Zoe, Age  18 };IUserService userService  new UserService();// 模拟增加一个用户userService.AddUser(user);Console.ReadLine();} } 这样项目就正常运行啦这个就不用我截图了吧小伙伴都会吧。项目运行正常但需要加一个需求用户增加成功之后进行邮件发送通知。目前有两种解决方案直接在增加用户方法中添加加发送邮件逻辑(相信很多小伙伴是这样做的见效快还简单)如果频繁在增加用户前或后添加新需求呢还继续加吗可能到最后增加用户的方法变得很复杂后期也不好维护如果要去掉某一个功能又得把代码改回来作为程序员是不是又要和产品同事搞架啦(文明人不动手)当然如果需求固定这种方式也不错。面向切面实现即在不影响原有代码逻辑的情况动态的对方法进行拦截在方法执行前或后添加业务即可。项目中引入AOP(面向切面编程)思想原始动态代理实现先来加个代理类如下using System; using System.Collections.Generic; using System.Reflection; using System.Text; namespace Aop {// 继承DispatchProxypublic class MyProxy : DispatchProxy{//具体类型public object TargetClass { get; set; }protected override object Invoke(MethodInfo targetMethod, object[] args){Console.WriteLine(增加用户前执行业务);//调用原有方法targetMethod.Invoke(TargetClass, args);Console.WriteLine(增加用户后执行业务);return true;}} } 然后在Main函数直接使用即可如下class Program {static void Main(string[] args){//原始需求User user  new User { Name  Zoe, Age  18 };IUserService userService  new UserService();userService.AddUser(user);Console.WriteLine(动态代理 实现新需求);//1. 创建代理对象IUserService userService1  DispatchProxy.CreateIUserService, MyProxy();//2. 因为调用的是实例方法需要传提具体类型((MyProxy)userService1).TargetClass  new UserService();userService1.AddUser(user);Console.ReadLine();} } 动态代理就实现需求功能啦可以在用户增加前或后都进行相关需求处理运行看效果第三方库Castle.Core封装的美滋滋通过上面演示原生的动态代理实现面向切面编程显得相对麻烦比如强制转换、传递类型等操作常用的Castle.Core将动态代理进一步封装使用就相对方便点啦这次定义一个拦截器即可using Castle.DynamicProxy; using System; using System.Collections.Generic; using System.Text;namespace Aop {// 自定义拦截器public class MyIntercept : IInterceptor{public void Intercept(IInvocation invocation){//执行原有方法之前Console.WriteLine(增加用户前执行业务);//执行原有方法invocation.Proceed();//执行原有方法之后Console.WriteLine(增加用户后执行业务);}} } Main函数中使用拦截器即可如下using AopModel; using AopService; using Castle.DynamicProxy; using System; using System.Reflection; using System.Reflection.Metadata;namespace Aop {class Program{static void Main(string[] args){Console.WriteLine(原始需求);User user  new User { Name  Zoe, Age  18 };IUserService userService  new UserService();// 模拟增加一个用户userService.AddUser(user);Console.WriteLine(动态代理 实现新需求);//1. 创建代理对象IUserService userService1  DispatchProxy.CreateIUserService, MyProxy();//2. 因为调用的是实例方法需要传提具体类型((MyProxy)userService1).TargetClass  new UserService();userService1.AddUser(user);Console.WriteLine(Castle.Core方式);//先实例化一个代理类生成器ProxyGenerator generator  new ProxyGenerator();//通过代理类生成器创建var u  generator.CreateInterfaceProxyWithTargetIUserService(new UserService(), new MyIntercept());u.AddUser(user);Console.ReadLine();}} } 运行效果如下Autofac集成了Castle.Core用着也挺不错Autofac已经集成了Castle.Core啦在聊MemoryCache的时候就已经用到使用比较简单可以通过特性标注的方式就可以针对某个类或接口的方法进行拦截加强详情请参考这篇文章(因MemoryCache闹了个笑话)。3. 应用场景AOP思想是很优秀但总不能处处都得用吧需根据业务来评估是否需要常用应用场景大概有以下几个安全控制通常在Web开发的时候会使用过滤器或拦截器进行权限验证这也是AOP思想的落地对于客户端程序通过上述演示的几种方式可以轻松实现权限的统一管理和验证事务处理相信小伙伴都写过数据库事务代码吧常规做法就是在业务方法中直接开启事务执行完成提交或回滚即可AOP思想也能很好处理这种情况异常处理统一的异常处理是最好的选择除非是特殊的业务通常Web有异常过滤器客户端程序可以用上述几种方式日志记录目前来说日志记录应该是作为系统功能的一部分AOP统一记录是不错的选择性能统计以AOP的思想对方法进行前后监控从而可以分析其执行性能缓存处理缓存处理如上次说到MemoryCache加上AOP拦截应用系统效率提升不错哦业务辅变主不变主业务变但会不定时增加辅助需求的场景比如增加用户后续可能在用户新增成功之后会增加邮件通知、推送新用户信息等功能。源码地址https://github.com/zyq025/DotNetCoreStudyDemo总结先暂时聊这么多吧瞌睡啦小伙伴们晚安喽一个被程序搞丑的帅小伙关注Code综艺圈跟我一起学~~~图片
http://www.sadfv.cn/news/56007/

相关文章:

  • 温州市城市建设档案馆网站做三网站
  • 网站建设开发图片wordpress设定主页
  • 茂名专业做网站公司网络教育平台登录入口
  • 大淘客做网站自己建设一个网站需要多少钱
  • 有没有电脑做兼职的网站吗重庆旅游网站制作公司
  • 安徽网站建设价格工作室注册条件
  • 做外贸网站可以收付款吗高端品牌网站建设的目的
  • 易语言做钓鱼网站国家企业信用公示信息系统官网
  • 网站设计精美案例做网站免费
  • 购物类网站的设计特点湖南门户网站建设
  • 忻州市建设厅网站首页网站运营成本预算
  • 兰州网站建设|兰州网站制作|兰州网站设计公司|兰州网络公司搜索优化是什么意思
  • 成都市做网站静态网站代做
  • 怎样找网站做蔬菜线上的网站
  • 洛阳网站建设哪家好数字短链接生成
  • dede手机网站模板购物网站页面设计思路
  • 策划案需要给做网站吗dw做网站怎么连接gif图片
  • 绍兴手机网站建设网站内页
  • dedecms做门户网站开发app需要多少钱?
  • 太原网站建设总部在哪wordpress主题显示不完整
  • 有男女做暖暖的视频网站ps网页素材
  • 有做网站的吗 优帮云面备案网站建设
  • 软件发布网站源码好的网站设计机构
  • 有哪些做问卷调查的网站好天门做网站
  • 如何优化网站tkddw和sql做网站
  • 东莞建站公司运转全网天下有 名电子商务专业怎么样
  • 微网站免费搭建平台wordpress顺序
  • 网站怎么经营网站建设哪家公司便宜
  • 网站优化软件方案网站ftp查询
  • 如何做个网站推广自己产品在线设计平台有什么用