任何人都可以发布一个没有记录的面向方面编程(AOP)的例子吗?
我查看了几个资源,但所有示例都是简单的日志记录.它有用的是什么?
其中一个例子是直接从这个面向方面的程序设计:模块化的激进研究,Youtube视频绘制到显示器.在示例中,您有一个绘图程序,它由点,形状等组成,当发生对这些对象的更改时,您需要告诉显示器更新自身.如果不在一个方面处理它,你最终会重复自己.
正如我所理解的那样,AOP的创建是为了不重复自己的交叉问题,这可能与业务逻辑无关.通过各方面,您可以将这些问题模块化到方面.其中一个例子是记录,但是你可能最终会重复一些不同的事情.它一直在发展,它不再是面向方面的编程,而是面向方面的建模.
有关面向方面编程的更多信息可以从以下来源中找到:
阅读:
维基百科 - 面向方面的编程
听
软件工程广播 - 第106集:AOP简介
软件工程广播 - 第11集:采访Gregor Kiczales
观看:
谷歌视频 - Anurag Mendhekar:面向方面的编程(丹·弗里德曼诞辰60周年)
Youtube - 面向方面编程:模块化的激进研究
Youtube - 面向方面的建模 - 它是什么以及它有什么用处
安全
注入检查权限和阻止访问的代码
asp.net webcontrols/webparts的友情错误消息
注入代码以捕获异常并在编译时编写堆栈跟踪或在编译错误时编写友好消息(如此处的内容:asp.net/MOSS2007的透明通用异常处理(带代码))
性能
注入设置perf计数器的代码,以便概览应用程序运行缓慢的位置
验证:
[NotNull] public string Property1 { get; set; } [Length(Min = 10, Max = 20)] public string Property2 { get; set; } [Regex(Expression = @"[abc]{2}")] public string Property3 { get; set; }
撤消 - 我正在调用支持撤消操作的第三方程序集.它要求调用者创建撤消上下文,调用程序集中的某些方法,然后销毁撤消上下文.上下文可以嵌套.此外,如果创建了上下文但仍处于需要重新启动应用程序的不良状态.
通常使用undo我会写这样的东西
void foo() { int id = lib.create_undo_context(); try { lib.performsomeaction(); lib.performsomeaction(); lib.performsomeaction(); } finally { lib.destroy_undo_context(id); } }
使用PostSharp我定义了一个名为[Undo]的属性,该属性在方法启动时创建撤销上下文,并在方法退出时销毁它(即使抛出异常) - 所以代码看起来像这样
[Undo] void foo() { lib.performsomeaction(); lib.performsomeaction(); lib.performsomeaction(); }
实现这个比我展示的要复杂一点,因为即使在存在嵌套撤销上下文的情况下,我也确保清除所有撤消上下文 - 但是你明白了.