[英]Design question regarding Factory Pattern
我想將IGameScoreSource
類型IGameScoreSource
到一個類中,但是我很IGameScoreSource
如何進行處理。
static class GamesScoreSourceFactory
{
public IGameScoreSource GetGameScoreSource(GameScoreSourceType gameScoreSourceType)
{
switch(gameScoreSourceType)
{
case FromFile:
return new GameScoreFile();
case FromDB:
return new DatabaseRepos();
case FromThirdPartyAPI:
return new ThirdPartyWrapper();
}
}
}
對於兩個不同的場景,我有兩個問題。
所有這三種情況都神奇地找出了從何處獲取參數。 因此,對於GameScoreFile
它知道要查看的文件路徑,對於DatabaseRepos
它知道在哪里可以找到連接字符串。
大概這些位置在具體類中是硬編碼的。 但是,如果我想更改位置怎么辦? 假設將scores.txt硬編碼在GameScoreFile.cs
,如果我想要rand_scores.txt
怎么rand_scores.txt
?
所以:
static class GamesScoreSourceFactory
{
public IGameScoreSource GetGameScoreSource(GameScoreSourceType gameScoreSourceType, string param)
{
switch(gameScoreSourceType)
{
case FromFile:
return new GameScoreFile(string param);
case FromDB:
return new DatabaseRepos(string param);
case FromThirdPartyAPI:
return new ThirdPartyWrapper(ThirdPartyConfig conf{IPAddress = ipAddress, Port = port});
}
}
}
前兩種情況很好,但第三種情況不好,因為它需要一個config對象。
我必須創建另一個工廠類嗎? 但是調用代碼不必知道要調用哪個Factory對象,結果本身就變成了Factory?
我不確定如何處理...如果重復,請鏈接我。
理想情況下,您將以下類型作為對工廠類的依賴項注入
GameScoreFile
DatabaseRepos
ThirdPartyWrapper
這樣,無論您用於依賴關系解析的哪個框架都知道要傳遞對應類型的內容。
我會嘗試隔離依賴項,以使工廠類不必了解太多。
假設您的IGameScoreSource的每個具體實現都有自己的依賴性。 在上面的示例中,兩個需要一個字符串,而第三個則需要ThirdPartyConfig。
這看起來並不多,但是隨着您逐步重構類,每次引入或更改依賴項時,工廠類也必須進行更改。 不理想。
您可以為每種具體類型創建一個工廠,然后對其中一種實現的任何更改只會影響其自己的工廠。 然后,主要工廠類將僅與這些特定工廠一起使用,而不受每次更改的影響。
正確的解決方案取決於您的域模型和所使用的IOC方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.