2010-05-21 34 views
2

我想要做的就是使用类中每个方法返回的值进行一些操作。对每个方法的返回值采取的操作

因此,举例来说,如果我有一个Order类具有方法

public Customer GetCustomer() 
{ 
Customer CustomerInstance = // get customer 
return CustomerInstance; 
} 

比方说,我想记录这些的创造 - 日志(CustomerInstance);

我选项(据我所知)是:返回对象之前,每一种方法

  1. 通话记录()。我不是这样的粉丝,因为如果在很多方法上使用它,它会变得很笨重。这也不是该方法目的的固有部分。

  2. 使用组合物或继承到层日志卡隆类似于Order类:

    公共客户GETCUSTOMER()
    {
    顾客CustomerInstance = this.originalCustomer.GetCustomer(); Log(CustomerInstance);
    return CustomerInstance;
    }
    我不认为这会为我购买任何超过#1的东西。

  3. 在每个返回的类型创建扩展方法:

    顾客CustomerInstance = Order.GetCustomer()日志();
    其缺点同样多。

我正在为每个(或几乎每个)返回的对象执行此操作,如果可能,会自动执行此操作,而无需编写双倍的代码量。我觉得我要么试图弯曲语言去做一些不应该做的事情,要么就是没有认识到可以实现这一点的语言功能。可能的解决方案将不胜感激。

回答

1

你需要寻找到Aspect Oriented Programming

通常情况下,一个方面是分散或纠结的代码,使其更难理解和维护。它由于功能(例如日志记录)分散在许多可能使用其功能的无关函数上,可能在完全不相关的系统,不同的源语言等中分散。这意味着改变日志记录可能需要修改所有受影响的模块。各方面不仅与它们表达的系统的主线功能相互纠缠,而且相互纠缠。这意味着改变一个问题需要理解所有纠结的问题,或者有一些方法可以推断出变化的影响。

添加日志记录是此方法的一种用法。

0

在我看来,您的选择1是实现它的方法。即使这将在每种方法的结尾,那就是所做的。我不会添加额外的模糊层次,因为它不是一种方法的内在目的。

顺便说一句,面向方面的编程正好解决了你有这个问题(见ChrisF的答案),但是我们不再谈论C#了。

相关问题