2009-06-17 64 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