2010-05-21 35 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#了。

相關問題