C# 对每种方法采取的行动';s返回值

C# 对每种方法采取的行动';s返回值,c#,C#,我想做的是使用类中每个方法返回的值执行一些操作 例如,如果我有一个类顺序,它有一个方法 public Customer GetCustomer() { Customer CustomerInstance = // get customer return CustomerInstance; } 假设我想记录这些的创建-log(CustomerInstance) 我的选择(AFAIK)是: 在返回对象之前,在每个方法中调用Log()。我不喜欢这个,因为如果在有很多方法的很多类上使用它,它会变得

我想做的是使用类中每个方法返回的值执行一些操作

例如,如果我有一个类顺序,它有一个方法

public Customer GetCustomer()
{
 Customer CustomerInstance = // get customer
 return CustomerInstance;
}
假设我想记录这些的创建-log(CustomerInstance)

我的选择(AFAIK)是:

  • 在返回对象之前,在每个方法中调用Log()。我不喜欢这个,因为如果在有很多方法的很多类上使用它,它会变得很笨拙。它也不是方法目的的固有部分

  • 使用组合或继承在Order类上分层日志调用,类似于:

    公共客户GetCustomer()
    {
    Customer CustomerInstance=this.originalCustomer.GetCustomer(); 日志(CustomerInstance);
    返回CustomerInstance;
    }
    我认为这不会让我超过1英镑

  • 在每个返回的类型上创建扩展方法:

    Customer CustomerInstance=Order.GetCustomer().Log()
    这也有同样多的缺点

  • 我希望对返回的每个(或几乎每个)对象都这样做,如果可能的话,会自动执行,而不必编写双倍的代码。我觉得我要么试图让语言去做它不应该做的事情,要么没有认识到一些能够实现这一点的语言特性。非常感谢可能的解决方案。

    您需要研究:

    通常,方面作为代码分散或纠结,使其更难理解和维护。由于功能(如日志记录)分布在许多可能使用其功能的不相关功能上(可能在完全不相关的系统、不同的源语言等中),因此它是分散的。这意味着更改日志记录可能需要修改所有受影响的模块。方面不仅与表达它们的系统的主线功能纠结在一起,而且彼此之间也纠结在一起。这意味着改变一个关注点需要理解所有复杂的关注点,或者有一些可以推断改变效果的方法

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

    您应该检查


    我想你可能会觉得这很有用。

    在我看来,你的选择1就是这样做的。即使在每个方法的末尾都会出现这种情况,也要这样做。我不会添加额外的模糊层,因为这不是方法的“内在目的”

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