项目越做越大,发现因开发时间、需求的紧急程度以及个人技术等方面的原因,日志、异常和事务与业务的耦合越来越严重,打算趁着项目还在把控中的时候,对代码的进行优化,便于今后的扩展和维护,所以看中了AOP的特点。虽然查阅了大量资料,除了PostSharp以外,没找到一个合乎心意的,望各位能推荐下实际应用过的AOP框架!
需求:
1.最好是开源的,便于学习和自己扩展。
2.是静态织入的,类似java的AspectJ。尝试了几个动态织入的,限制太多,需要对已有方法提供接口,且接口方法还必须是虚方法,这样重构原有代码的代价太高。
自己也找过不少框架来尝试,如:AspectDNG、DotNetAOP、AspectSharp等,如今许多推荐的都是很多年前写的,而且大多数都没有维护和更新了,希望各位推荐的能出点给力的答案,真正是在各位项目中运用过的!相信不少人也有和我同样的期待!
------解决思路----------------------
这东西感觉维护起来也不好,我没深入过,忠于插件式MEF
------解决思路----------------------
作.net的居然不知道企业库?
------解决思路----------------------
可以看下Afterthought,http://afterthought.codeplex.com/
静态IL-Weaving,开源。优点是用起来非常简单,很容易上手。
------解决思路----------------------
有用过。在一个CMS系统有比较大规模应用,用于实现DSL和对Control扩展改造以符合动态框架的需要。其它的一些小项目中也有用,包括你说的这种统一添加日志的用法。
当然,AOP的使用应当严格规划和限制,应该权衡开发效率和系统维护的利弊,是在设计阶段就确定下来比较好,而不是作为后期弥补一些缺陷的手段,因为它会带来代码可读性、调试、扩展方面的一些困难。
------解决思路----------------------
如果你只是用基本的AOP,那么Postsharp的Express版本够用了
------解决思路----------------------
我们是重度应用了AOP,怎么可能只用到express的功能。postsharp express中甚至都无法实现advices和pointcuts,比如要统一给某一组方法加日志,就要用到Composite Aspects功能,而这个是只有commercial版本才有的。
事实上我们考查了很多AOP框架,没有一种是完全符合要求的。postsharp除了要收费外,用法也相当复杂,afterthought比较简单,但是功能比较弱,最后我们是重写了afterthought的编译器,扩展了一些自己的功能。