对不好的标题抱歉我只是不知道如何正确说出来。
假设我有一个名为Table的类和这三种方法:
//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");
工厂不会是静态的,因为这会使使用工厂的其他代码难以测试
您怎么看?
答案 0 :(得分:1)
这取决于你想要达到的目标。如果使用工厂,您可以获得更好的控制反转,因此您可以为测试期间使用的Table创建一个Test实现,这样可以对单元测试进行更精细的控制。
如果您的工厂使用无处不在,您可以在测试模式下将其替换为TestTable工厂。
答案 1 :(得分:1)
使用工厂的主要原因是将对象的创建与其使用分离。由于您只是使用不同的参数创建Table
对象,因此我认为将静态创建方法从Table
类本身中删除会更有意义。
答案 2 :(得分:0)
您是否考虑过:
var tab = new Table("tableName");
和
var tablePath = new TablePath("SomeTablePath");
var tab = new Table(tablePath);
OTOH,如果你想要一个工厂和所有可以提供给你的解耦,我会提取一个表接口,并让工厂返回接口。