C# 你们有工厂生产这些方法吗。静态方法在类型上还是在工厂中?

C# 你们有工厂生产这些方法吗。静态方法在类型上还是在工厂中?,c#,refactoring,C#,Refactoring,对不起,我的标题不好,我只是不知道怎么用词 假设我有一个名为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 abo

对不起,我的标题不好,我只是不知道怎么用词

假设我有一个名为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);
你明白了

但是我想知道这些是否真的应该在工厂里。大概是这样的:

 TableFactory factory = new TableFactory();
 Table tab = factory.CreateNew("DummyTableName");
 Table tab = factory.OpenTable("SomePath");
工厂不会是静态的,因为这会使使用工厂的其他代码难以测试


你怎么想?

这取决于你想达到什么目标。如果使用工厂,您可以获得更好的控制反转,因此您可以为测试期间使用的表创建一个测试实现,这允许对单元测试进行更细粒度的控制


如果您的工厂使用是普遍存在的,您可以在测试模式下用TestTable工厂替换它

使用工厂的主要原因是将对象的创建与其使用分离开来。由于您只是使用不同的参数创建一个
对象,因此我认为将静态创建方法从
类本身中分离出来更有意义。

您是否考虑过:

var tab = new Table("tableName");


OTOH,如果你想要一个工厂和所有可以提供给你的解耦,我会提取一个表接口,让工厂返回接口。

打开一个表需要调用一个底层的提供程序,所以如果我只是使用一个构造函数,我将打破“构造函数中没有工作规则”。
var tab = new Table("tableName");
var tablePath = new TablePath("SomeTablePath");
var tab = new Table(tablePath);