2013-02-28 38 views
1

我不知道這是否有可能以任何方式,但我試圖獲得的是強制從某些基類繼承的開發人員實現特定參數在這個類的每個方法中。爲從基類繼承的類中的每個方法添加一個可選參數C#

喜歡的東西:

class SomeClass : BaseClass 
{ 
    public void SomeMethod(bool iAmAForcedParameter = false) 
    { 

    } 
} 

這樣做的原因是,我們有服務,可以從MVC項目被調用(這是我們的前端),或者可以從其他服務消費。 如果服務將從前端調用,則應在所有操作完成後將更改寫入數據庫。如果服務從另一個服務被使用,它應該只進行更改(在內存中),而不是將它們寫入數據庫。

我想要的另一個想法是確定誰是調用者,如果他是來自特定類型的方法不應發送數據。如何,我不知道如何做到這一點,或者如果這甚至可能沒有巨大的性能影響。

問候並感謝您的幫助提前。

+0

我不明白的是:「這樣做的原因是,這個方法的調用者定義是否改變的方法是做必須發送到SQLServer或不(等待更多的更改)。「請嘗試修改它。 – 2013-02-28 09:13:57

+0

客戶端可否更改此參數? – happygilmore 2013-02-28 09:14:19

+1

爲什麼你不能使用接口? – Alex 2013-02-28 09:16:49

回答

1

奇怪的是,你的每個方法都有兩個責任。我寧願創建兩個派生類。一個與持久化數據到數據庫的方法,以及其他,這不:

class SomeInMemoryClass : BaseClass 
{ 
    public override void SomeMethod() {} 
} 

class SomeSqlClass : BaseClass 
{ 
    public override void SomeMethod() {} 
} 

反正 - 布爾傳遞給方法是一種設計的氣味。它告訴你的方法有兩件事。最好是有兩個方法,這告訴來電者,他們在做什麼:

void SomeInMemoryMethod() 
void SomeSqlMethod() 

難道你不認爲這是更易於維護,比

void SomeMethod(false) 

對於上次編輯:SomeInMemoryClass對象不應該將數據保存到數據庫中。其他類型應使用SomeSqlClass實例。

+1

這可能是一個解決方案。仍然必須檢查與我的同事對這個想法的接受程度,但已經表示感謝。 我們唯一的問題是,我們然後將有大約20-30方法,而不是10-15只有一個區別,在一個「方式」,我們會在最後稱之爲提交.. – 2013-02-28 09:47:53

+0

@KevinBoss你目前有20-30個方法,它們只是隱藏在10-15個方法中,因爲每個方法都做兩件事情:) – 2013-02-28 09:55:54

+1

我必須同意這一點。也許我們只是懶得編寫額外的代碼;) – 2013-02-28 09:59:10

1

在這個類的每個方法中實現一個特定的參數。

我想你只是在尋找一個屬性,然後你可以檢查每種方法。

0

我也不理解第二部分。

的第一個項目,只需使用

public void SomeMethod(bool iAmAForcedParameter) 

因此,沒有可選的參數。

如果你想有一個可選參數是無論如何使用

public void SomeMethod(bool iAmAForcedParameter) 
{ 
    SomeMethodX(iAmAForcedParameter) 
} 

public void SomeMethodX((bool iAmAForcedParameter = false) 
相關問題