2009-06-17 67 views
0

對不起,我只是不知道如何正確的說話。你有這些方法的工廠嗎?類型或工廠中的靜態方法?

說我有一類叫做表和這三種方法:

//Creates a new table in underlying provider and returns new Table object. 
CreateNew(string Name); 
//Opens the table in provider and returns new Table object. 
OpenTable(string Path); 
//Same action as above just on a collection, and returns a IList<Table> 
OpenTables(IList<string> path); 

在我使用這樣的事情,所有的方法都是靜態的類型當前時間:

Table tab = Table.OpenTable("SomePath"); 
Table tab = Table.CreateNew("DummyTableName"); 

你明白了。

但是我想知道這些是否應該在工廠。事情是這樣的:

TableFactory factory = new TableFactory(); 
Table tab = factory.CreateNew("DummyTableName"); 
Table tab = factory.OpenTable("SomePath"); 

工廠不會是靜態的,因爲這將使得使用一個工廠難以測試

你覺得還有什麼其他的代碼?

回答

1

這取決於你想達到的目標。如果您使用工廠,則可以更好地控制轉換,例如,您可以爲測試過程中使用的表創建一個測試實現,這可以更好地控制單元測試。

如果您的工廠使用無處不在,您可以在測試模式下將其替換爲TestTable工廠。

1

使用工廠的主要原因是將對象的創建與其使用分離。由於您只是創建了一個具有不同參數的Table對象,我認爲靜態創建方法遠離Table類本身更有意義。

0

你有沒有考慮:

var tab = new Table("tableName"); 

var tablePath = new TablePath("SomeTablePath"); 
var tab = new Table(tablePath); 

OTOH,如果你想有一個工廠,所有的解耦,可以給你,我想提取表界面,並有工廠返回接口。

+0

打開一個表格需要一個底層提供者來調用,所以如果我只是使用了一個構造函數,我就會打破「在構造函數規則中沒有工作」。 – 2009-06-17 04:02:05