天天看点

使用Unity做类的增强(续)

我们已经实现了用户注册功能,现在想增加日志记录功能。具体来讲就是在用户注册前后,分别输出一条日志。我们当然可以修改原有的业务代码。

现在换个角度来问两个问题:

1. 团队开发中,我们很可能根本拿不到源代码,那又怎么去增加这个功能呢?

2. 这次需求是增加日志,以后再增加其他需求(比如异常处理),是不是仍然要改业务类呢?

总结一下:

我们要在不修改原有类业务代码的前提下,去做类的增强。我们的设计要符合面向对象的原则:对扩展开放,对修改封闭!

都有哪些办法呢?我们尝试以下几种方法:

<a href="http://blog.csdn.net/shuaihj/article/details/53766805">使用装饰器模式做类的增强</a>

<a href="http://blog.csdn.net/shuaihj/article/details/53766899">使用.Net代理模式做类的增强</a>

<a href="http://blog.csdn.net/shuaihj/article/details/53766988">使用Castle做类的增强</a>

<a href="http://blog.csdn.net/shuaihj/article/details/53767234">使用Unity做类的增强</a>

<a href="http://blog.csdn.net/shuaihj/article/details/53767434">使用Unity做类的增强(续)</a>

<a href="http://blog.csdn.net/shuaihj/article/details/53815469">使用Autofac做类的增强</a>

上次我们使用unity实现了log日志的增强,这次我们来实现异常处理、权限验证两个需求;并且不使用拦截器的方式,而是使用Attribute给原有业务类来打标签的方式来达到业务增强的目的。

业务模型

接口设计

业务实现

上层调用

我们将使用第三方的Unity来对原有的类做业务增强,首先使用NuGet安装。

使用Unity做类的增强(续)

日志Attribute类

异常Attribute类

权限Attribute类

给业务接口打标签,原有业务类会自动继承

对比一下扩展前后的业务展现

使用Unity做类的增强(续)

继续阅读