.Net里的AOP,求推荐!!!

jobscq 2014-09-29 11:46:03
项目越做越大,发现因开发时间、需求的紧急程度以及个人技术等方面的原因,日志、异常和事务与业务的耦合越来越严重,打算趁着项目还在把控中的时候,对代码的进行优化,便于今后的扩展和维护,所以看中了AOP的特点。虽然查阅了大量资料,除了PostSharp以外,没找到一个合乎心意的,望各位能推荐下实际应用过的AOP框架!
需求:
1.最好是开源的,便于学习和自己扩展。
2.是静态织入的,类似java的AspectJ。尝试了几个动态织入的,限制太多,需要对已有方法提供接口,且接口方法还必须是虚方法,这样重构原有代码的代价太高。

自己也找过不少框架来尝试,如:AspectDNG、DotNetAOP、AspectSharp等,如今许多推荐的都是很多年前写的,而且大多数都没有维护和更新了,希望各位推荐的能出点给力的答案,真正是在各位项目中运用过的!相信不少人也有和我同样的期待!
...全文
443 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jshi123 2014-10-08
  • 打赏
  • 举报
回复
有用过。在一个CMS系统有比较大规模应用,用于实现DSL和对Control扩展改造以符合动态框架的需要。其它的一些小项目中也有用,包括你说的这种统一添加日志的用法。 当然,AOP的使用应当严格规划和限制,应该权衡开发效率和系统维护的利弊,是在设计阶段就确定下来比较好,而不是作为后期弥补一些缺陷的手段,因为它会带来代码可读性、调试、扩展方面的一些困难。
jobscq 2014-10-08
  • 打赏
  • 举报
回复
引用 6 楼 jshi123 的回复:
可以看下Afterthought,http://afterthought.codeplex.com/ 静态IL-Weaving,开源。优点是用起来非常简单,很容易上手。
谢谢你的推荐,在问下你们项目中对于AOP是怎么看待的呢?是否有运用到项目中呢?
jobscq 2014-10-08
  • 打赏
  • 举报
回复
引用 11 楼 jshi123 的回复:
我们是重度应用了AOP,怎么可能只用到express的功能。postsharp express中甚至都无法实现advices和pointcuts,比如要统一给某一组方法加日志,就要用到Composite Aspects功能,而这个是只有commercial版本才有的。 事实上我们考查了很多AOP框架,没有一种是完全符合要求的。postsharp除了要收费外,用法也相当复杂,afterthought比较简单,但是功能比较弱,最后我们是重写了afterthought的编译器,扩展了一些自己的功能。
确实,我也也是发现了PostSharp在某些能满足我需求的功能上面已经开始收费而暂时放弃的。 现有的很多好的AOP框架都已经停止了维护,说实话,在这里我深刻的感受到微软的不开源制约了.net的发展。在AOP方面可以很肯定的说微软的架构方式导致了其比不上java的灵活 既然如此,那我只能暂时对AOP浅尝则止了。 OK,感谢各位的回答,结贴散分!
jshi123 2014-10-08
  • 打赏
  • 举报
回复
我们是重度应用了AOP,怎么可能只用到express的功能。postsharp express中甚至都无法实现advices和pointcuts,比如要统一给某一组方法加日志,就要用到Composite Aspects功能,而这个是只有commercial版本才有的。 事实上我们考查了很多AOP框架,没有一种是完全符合要求的。postsharp除了要收费外,用法也相当复杂,afterthought比较简单,但是功能比较弱,最后我们是重写了afterthought的编译器,扩展了一些自己的功能。
林英南 2014-10-08
  • 打赏
  • 举报
回复
如果你只是用基本的AOP,那么Postsharp的Express版本够用了
jobscq 2014-10-08
  • 打赏
  • 举报
回复
引用 8 楼 jshi123 的回复:
有用过。在一个CMS系统有比较大规模应用,用于实现DSL和对Control扩展改造以符合动态框架的需要。其它的一些小项目中也有用,包括你说的这种统一添加日志的用法。 当然,AOP的使用应当严格规划和限制,应该权衡开发效率和系统维护的利弊,是在设计阶段就确定下来比较好,而不是作为后期弥补一些缺陷的手段,因为它会带来代码可读性、调试、扩展方面的一些困难。
我是重构嘛,肯定重新进行了设计。静态织入确实会造成代码可读性问题。如果仅用于辅助调试和测试,相信还是不会对调试和扩展造成困难的,毕竟没有参与业务的逻辑运算,只在业务中新增了部分输出和流程终止。目前的计划是仅对日志和异常模块采用AOP。 请问当时你们是自己开发的AOP框架呢,还是使用的成熟的第三方dll呢,如果是第三方dll,那这个dll是你所推荐的Afterthought吗?
jshi123 2014-09-29
  • 打赏
  • 举报
回复
可以看下Afterthought,http://afterthought.codeplex.com/ 静态IL-Weaving,开源。优点是用起来非常简单,很容易上手。
jobscq 2014-09-29
  • 打赏
  • 举报
回复
如果大家真的没用到AOP框架,那么也可以给出些日志管理方面的解决方案也行 比如说,我想对所有方法名称中含 ”add“ 的方法输出日志, 或者我想对某个命名空间下的所有public方法的返回值输出到日志 等等。 我觉得这类应用应该非常广泛,比如调试某个模块时,我可以快速的修改让其他日志不输出,只输出我希望看到的日志信息,这类对调试多线程或者自定义协议的通信等业务非常有帮助。 希望大家能给些idea!!
jobscq 2014-09-29
  • 打赏
  • 举报
回复
引用 1 楼 Joyhen 的回复:
这东西感觉维护起来也不好,我没深入过,忠于插件式MEF
MEF是插件式管理吧,和组件差不多的概念,和面向切面还是有很大的差别哇,应用的级别都不一样,MEF是针对项目的,AOP是针对业务本身的
jobscq 2014-09-29
  • 打赏
  • 举报
回复
引用 2 楼 winner2050 的回复:
作.net的居然不知道企业库?
Unity嘛,企业库是知道,只用过里面的依赖注入,里面有动态拦截,我也说了动态代理有很多缺陷,想找个静态织入实现的AOP
winner2050 2014-09-29
  • 打赏
  • 举报
回复
作.net的居然不知道企业库?
joyhen 2014-09-29
  • 打赏
  • 举报
回复
这东西感觉维护起来也不好,我没深入过,忠于插件式MEF

7,765

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧