标签:
利用泛型减少重复,实现简易AOP 一、设计原则之DRY,不要重复自己 在所有设计原则中,DRP(Don‘t Repeat Yourself)是最基础的原则之一。是由 Andy Hunt 和 Dave Thomas 在 The Pragmatic Programmer 中总结出来的, 成为软件开发和设计的最佳实践基础。开发者认识到,通过好的实践和适当的抽象可以减少重复,使程序的代码变得简洁。
重复是一种浪费。程序中的每一行代码都需要维护,重复就会导致出现bug的机会增多,也增加了系统的复杂度。对开发者而言,修改一个地方,而没有修改其他相同
逻辑的地方会让他们感到很难维护。单一职责要求:每个知识点必须有一个唯一的,明确的,权威的描述。
重复的过程需要自动化。DRP可以用在过程上,比如手工测试,慢,容易出错,而且难以重复,自动化测试就可以解决这些问题。凡是可以标准化,重复的过程都可以自动化。
重复的逻辑需要抽象。逻辑中的重复,比如拷贝的if-then swith-case 语句是很容易检查到的,很多设计模式就是来解决这种问题。如果一个对象的创建之前需要做很多事情,
可以用工程模式来封装,如果一个对象的行为有很多种变化,可以用策略模式来处理,而不是用大量的if else 语句。
DRP 是基础,比如开闭原则,单一职责,一次且仅一次的原则都是建立在DRP原则之上
二、泛型基础
泛型是C# 2.0 提出的特性,所谓泛型,即通过参数化类型实现在同一份代码上操作多种类型的数据,泛型编程是一种范式的转化,利用参数化类型,将类型抽象化, 从而实现代码的灵活复用,精简代码。泛型的好处:
a.减少了对对象进行装箱和拆箱所导致的性能成本,提高了效率。 b.赋予了代码更强的类型安全。 c.实现了更为灵活的代码复用。
例如: 安全性 装箱拆箱
泛型格式: 泛型类 class MyClass<T>{} 泛型方法 T Function<T>() 泛型接口 interface MyInterfac <T> ,.NET类库里有很多泛型的接口 比如:IEnumerator<T>、IList<T>等 泛型委托 delegate void MyAction<T>(T obj);
在定义泛型时,可以对客户端代码在实例化类时用于类型参数的类型施加一些限制,这些限制称为约束,约束是使用where关键字实现的。.. 下表列出了五种类型的约束:
默认值, 我们可以用default关键字为 泛型 设置默认值
三、EAP里面的重复代码
在Imp 接口实现层,有很多重复的代码,最常见的重复是日志和异常的处理代码,还有返回值的处理,例如: 这里真正的业务代码只有1句 result.Value = this.BillBfl.GetImportBillSubSys(); 这里真正的业务代码只有2句 TNBillLayout layout = TNBillLayout.FromJson(jsonparam); this.BillBfl.SaveBillLayout(layout); 这种代码在Imp层有很多,随处可见。 其他都是类似的,拷贝的,容易出错。
四、利用泛型改造后的代码 利用泛型方法和泛型委托,可以将上面的日志和异常处理提炼出来。例如:有返回值的泛型方法 无返回值的泛型方法 EAP中封装了如下的泛型方法,包含多至5个参数的又返回值和无返回值的泛型方法 专门针对IMP层代码的泛型方法
最多6个参数的泛型方法
改造后的代码:
总结: 利用泛型方法,可以实现日志,异常,性能计数的拦截,实现简易的AOP,同时减少重复,使代码变得简洁。 |
标签:
原文地址:http://www.cnblogs.com/drivenwinder/p/4475837.html