让我们假设我有一个已经存在的大型算法,它可以进行一些计算并返回结果:
public int JustSomeHeavyCalculations() {
var storeSthing = PrivateFunction1("param");
if (Somecondition) {
var variable = member.DoSomething() + member2.DoSomething2()
}
CallSomePrivateFunction();
return storeSthing * someRandNumber;
}
现在我有一个新的要求,说我必须登录一个文件并在控制台上打印"变量"的值,并且 PrivateFunction1 是一个昂贵的操作,应该以一种使用相同的参数再次调用它的方式缓存立即返回缓存的值。
我可以对此放轻松,修改函数并添加所有这些语句,但这对我来说不仅违反了 Open-Closed 原则,而且我觉得它会破坏算法的流程。
处理这种情况的最佳方法是什么?
这些是面向方面的编程旨在解决的经典类型的横切问题。 横切关注点跨越代码中的层和层,但理想情况下,您希望以非侵入性方式在一个位置实现。 面向方面的编程允许在编译或运行时将行为从类继承之外应用于类
。Microsoft应用程序体系结构指南中有一个很好的部分,介绍了什么是横切关注点,以及如何实现它们的一些想法。 谷歌的.NET面向方面编程将找到在.NET上实现方面或在 aosd.net 网站上启动的各种库。