2012-07-12 27 views
0

首先我有一個類的簽名看起來像這樣:構造函數參數的正確數目是多少? /我怎麼能結合這些類?

internal class JobStore : IJobStore 
{ 
    private readonly IFileHandler fileHandler; 
    private readonly IJobSerializer serializer; 
    private readonly IJobValidator validator; 
    internal readonly string DirectoryPath = "JobStore"; 
    internal readonly string JobExtension = ".job"; 

    public JobStore(IFileHandler fileHandler, IJobSerializer jobSerializer, IJobValidator jobValidator)... 

我有種想刪除的目錄路徑,並延伸到自己的類,但我也不太清楚。 我確實認爲在構造函數中有四個對象是一個壞主意。

我的問題是我怎麼能結合這些對象中的兩個,以減少我參加這個方法的參數的數量,是三太多?

道歉問題的模糊性。

+0

爲什麼你認爲你應該限制你的參數? – 2012-07-12 19:26:18

+0

構造函數中有3個而不是4個對象。它有多個構造函數嗎? – 48klocs 2012-07-12 19:27:37

+0

SRP - 我覺得有單一職責的班級不應該使用這麼多的班級,這導致我想到三個班級 - 知道它是自己的目錄+擴展可能有點多。 – Sean 2012-07-12 19:27:44

回答

4

看起來像你應該Refactor to Aggregate Services

+0

有趣。我認爲fileHandler + job serializer會一起使用,因爲它們總是一起使用? – Sean 2012-07-12 19:45:46

+0

這是非常好的建議。仔細考慮一下什麼樣的依賴關係集中在一起。 IJobSerializer可以在沒有IJobValidator的情況下工作嗎?如果沒有,找到一種方法將它關閉(例如)IJobValidatedSerializer。 – 2012-07-12 19:50:53

+0

只是做了它,它工作得很好,做了一個保存器和一個檢索器類(保存器包括驗證,它存在於一個帶有作業序列化器的類中)。 – Sean 2012-07-12 20:08:25

0

構造函數中的4個對象不是太多。沒有特定數量的參數被視爲「太多」

請注意,對於您可能會或可能不想使用您的構造函數的其他更多灰色條件,但具體的參數計數isn你的焦點應該放在哪裏?

只要確保你類代表某種形式的名詞,你會被罰款

0

你可以有多個參數的構造函數和它的確定。實際上,三是少數參數,也許你會有n個參數的方法和構造函數,只要你需要所有的參數。

0

如果您在使用時擔心所需參數的數量,那麼使用默認參數可能會有所幫助。

這樣,如果您發現自己只更改一個或兩個參數,並在其他時間使用默認值,那麼在創建新參數時不必傳遞如此多的參數。

但是,這不會將參數從構造函數本身中取出。

所以,我不知道你在找什麼,但也許這可能會幫助你。 :)

http://msdn.microsoft.com/en-us/library/dd264739.aspx

相關問題