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

高端网站建设多少钱网页设计代码模板免费

高端网站建设多少钱,网页设计代码模板免费,目前网站开发语言,查询学校信息的网站1. 前言最近在看《架构整洁之道》一书#xff0c;书中反复提到了面向对象编程的 SOLID 原则#xff08;在作者的前一本书《代码整洁之道》也是被大力阐释#xff09;#xff0c;而面向切面编程#xff08;Aop#xff09;作为面向对象编程的有力补充#xff0c;对实践整洁… 1. 前言最近在看《架构整洁之道》一书书中反复提到了面向对象编程的 SOLID 原则在作者的前一本书《代码整洁之道》也是被大力阐释而面向切面编程Aop作为面向对象编程的有力补充对实践整洁代码更是如虎添翼。除了整洁之道系列的影响外本文还致敬、借鉴、补充了Aspect Oriented Programming (AOP) in C# with SOLID一文。1. Aop 是什么在讨论 Aop 之前我们可以先看看一段很常见的代码。这是一段很典型的面向过程的代码我们可以看到有相同的异常处理逻辑如果我们想要避免重复的代码我们至少可以把异常处理封装一下:代码简洁了很多但是我们实际上是将真实的方法代码与日志代码纠缠在一起违反了 单一责任原则 。有没有一种可能让我们不需要在原来的代码上显式调用 TryCache 呢一个可能的答案是借助 AOP 来解决。使用 AOP我们可以在不改变原来代码的前提下添加额外的单元功能如异常处理日志处理、重试机制等。 AOP 可以把原来一大串的面向过程的代码重构成多个部分聚焦于每一小部分使我们的代码 可读性 和 维护性 更高避免了 代码重复和代码纠缠 的问题。2. 装饰器实现 AOPC# 可以使用的 Aop 框架有很多在我们谈论他们之前我们可以先利用语言自带的特性实现基础的 AOP 效果。 最简单的形式莫过于 装饰器模式 它的雏形大致如下可以看到装饰器只是在原来的对象上面扩展符合 开放封闭原则。我们在调用的时候只需显式创建装饰实例对象。 var tryClientnew TryHandlerMyClient(new MyClient());tryClient.GetOtherOne();细心的读者可能还会发现我们还可以在这个日志装饰器上面再附加一个装饰器比如一个针对结果处理的装饰器。var resultClientnew ResultHandlerTryHandlerMyClient(tryClient);但是这样的调用方法还是不尽人意想象如果某个对象有三四个装饰器那么我们创建实例的时候就需要多次传递。一个解决方法是 借助依赖注入 (DI) 只需注册一次服务类型避免通过创建实例来获取对象。另外对于 .net core自带的 DI 来说更便捷的方法是借助开源类库Scrutor 来注册装饰器对象。services.DecorateIMyClient, TryHandlerMyClient(); services.DecorateIMyClient, ResultHandlerMyClient();虽然解决了易用性但是我们很快就发现了另一些不尽人意的地方装饰器模式只能适用于 特定的类型约束是比较强的。如果我们希望我们示例中的装饰器可以实现通用就需要找别的方法了。3. 动态代理实现 Aop动态代理是指运行时生成通过隐式重写方法来附加额外的功能而其中最流行的莫过于 Castle DynamicProxy了。Castle DynamicProxy 的常规用法是继承 IInterceptor 接口通过实现 Intercept 方法来处理代理的逻辑。在调用的时候类似装饰器一样需要创建代理实例。有很多开源项目在使用 Castle DynamicProxy其稳定性和可靠性是值得信赖的更多的使用方法可以参照官方示例或者第三方开源项目的代码。需要特别注意的是Castle DynamicProxy 只能作用于接口或者虚方法这是动态代理的特性局限。除了 Castle DynamicProxy 外 AspectCore也是一个不错的选择。AspectCore 的快速简单应用通过继承 AbstractInterceptorAttribute 的 Attribute类来标记并拦截代理对应的接口或者虚方法更详细的用法可以参考 作者写的使用方法。虽然易用性很好但是要注意使用的场合如果是在低层次如基础设施层、应用入口层等或者特定的应用模块内使用对整体架构影响不大。如果是在高层次逻辑层、核心层、领域层等使用则会带来不必要的依赖污染。所以并不是推荐使用这种 Attribute 拦截代理的方式好在 AspectCore 的设计考虑到解耦的需要可以在单独配置代理拦截。serviceCollection.ConfigureDynamicProxy(config {config.Interceptors.AddTypedCustomInterceptorAttribute(Predicates.ForMethod(ICustomService, Call)); });但是不管是 Castle DynamicProxy 还是 AspectCore 都只能作用与接口或者虚方法这也是动态代理的局限特性。如果我们想要在不受限制地在非虚方法上实现 AOP 的效果就需要别的方法了。4. 编译时织入实现 AOP进行 AOP 的另一种方法是通过编译时织入在编译的程序集内部的方法中添加额外的 IL 代码附加我们想要的功能。PostSharp 是其中比较流行的一种然而由于其商业化的性质在这里不做过多介绍。开源方面Fody 是其中的佼佼者。Fody 在编译时使用 Mono.Cecil 修改 . net 程序集的 IL 代码。如果你没有 IL 代码方面的知识可以直接使用基于 Fody 开发的插件。其中最流行的插件是Costura和 Virtuosity。Costura 将依赖项作为资源嵌入实现多个 DLL 文件合并成一个 exe 的功能,而 Virtuosity 则是在构建的时候将所有成员更改为 virtual 重写 ORM 如EF的导航属性、NHibernate、 MockRhinoMocks、NMock以及前面提到的动态代理中需要 virtual 的地方为 virtual。Fody 中的插件还有很多除了 Costura 和 Virtuosity 之外我个人还使用过 MethodDecorator实现编译时重写类的方法或者构造函数来实现 AOP 的效果。所有 Fody 的插件首先都必须引入一个 FodyWeavers.xml 并声明使用的插件。?xml version1.0 encodingutf-8?!--FodyWeavers.xml--WeaversMethodDecorator //Weavers不同的插件在后面的使用方法会有所不同以 MethodDecorator 为例我们需要新建一个特定格式的 Attribute 类然后标记在特定的类方法上面。最后还需要一个 AssemblyInfo.cs 来配置哪些 Attribute 类产生作用。//AssemblyInfo.csusing System; [module: FodyTest]重新编译生成在输出中还可以看到 Fody 的输出。既然我们可以在编译时织入 IL 代码那么我们是不是可以提前生成我们想要的 AOP 效果比如说借助代码生成器。5. 代码生成器实现 AOP 效果T4是常见的文本生成框架我们可以使用此工具在设计时生成代码。前面我们提到过装饰器模式有特异性的问题只能针对特定类型实现 AOP 效果而借助代码生成器我们可以直接生成对应的代码模板避免了重复的劳动。由于我个人对 T4 没什么使用经验有兴趣的读者可以参考Aspect Oriented Programming (AOP) in C# via T4一文。除了 T4 之外Roslyn 也是一个强有力的工具已经有人基于 Roslyn 实现 AOP 的效果将 Roslyn 封装为 dotnet 全局工具 针对特定的文件插入指定的代码段有兴趣的读者可以参考 AOP_With_Roslyn 的代码示例。结语AOP 是我们 避免代码重复 和 增强代码可读性 的有力工具是我们编写整洁代码的有力保证借助 C# 语言自身的特性和诸多强大的开源工具使我们更专注于代码功能。原文地址: https://www.cnblogs.com/chenug/p/9848852.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.sadfv.cn/news/26875/

相关文章:

  • 网站备案许可证号查询旅游网站制作素材
  • 做电路设计的兼职网站做瑜伽网站
  • 永州做网站wordpress 图片菜单
  • 开通网站申请深圳网上申请个人营业执照
  • 做棋牌网站抓到会怎么量刑室内设计欣赏网站
  • 中航网站建设wordpress商城建站教程
  • 建设网站需要注意的事项对于职业规划做的好的网站
  • 网站建设制作解决方案兴文县建设工程网站
  • 爱站网挖掘工具五合一网站制作视频教程?
  • 国外儿童社区网站模板八步网站建设
  • 网站过度优化的表现淘宝客网站是怎么做的
  • 网站后台怎么做水印图片上海注册公司地址费用
  • 网站建设 江苏设计制作建筑模型教案
  • 南昌集团制作网站开发网站建设基础服务报价
  • 资源网站很难做域名网址注册
  • 快速网站开发介绍网站建设中面包屑导航的特点
  • 海口高端品牌网站建设广州专业的网站建设公司哪家好
  • 如何建立p2p网站企业app下载
  • 郧阳网站建设网络推广运营途径
  • 网站开发私活一个app费用多少钱
  • 网站建设优化陕西百度保障中心人工电话
  • 电子商务网站建设考纲温州网站制作企业
  • 吴川市规划建设局网站网店运营心得体会
  • 响应式电影资讯网站工作纪律
  • 长春长春网站建设网黄冈网站推广
  • 100个免费推广网站下载软文营销模板
  • 南昌网站开发制作公司花都商城网站建设
  • 整合资源加强全市网站建设ppt模板免费下载 素材教学
  • 网站设计时应考虑哪些因素百度竞价冷门产品
  • 做网站用的主机东莞网站建设制作公司排名