2009-06-17 2 views
0

Désolé pour le mauvais titre Je ne savais juste pas comment le dire correctement.Auriez-vous une usine pour ces méthodes. Méthode statique sur le type ou en usine?

Dire que j'ai une classe appelée Table et ces trois méthodes:

//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); 

À l'heure actuelle, je me sers quelque chose comme ça, où toutes les méthodes sont statiques du type:

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

Vous avez l'idée.

Cependant je me demandais si ceux-ci devraient vraiment être dans une usine. Quelque chose comme ceci:

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

L'usine ne serait pas statique qui ferait autre code qui utilise une usine difficile à tester

Que pensez-vous?

Répondre

1

Cela dépend de ce que vous essayez d'atteindre. Vous obtenez une meilleure inversion de contrôle si vous utilisez une fabrique, vous pouvez par exemple créer une implémentation de test pour Table que vous utilisez pendant le test, ce qui permet un contrôle plus précis de vos tests unitaires.

Si votre utilisation en usine est omniprésente, vous pouvez la remplacer en mode test par une usine TestTable.

1

La principale raison d'utiliser une fabrique est de découpler la création d'un objet de son utilisation. Puisque vous créez juste un objet Table avec différents paramètres, je pense qu'il est plus logique d'avoir les méthodes de création statiques de la classe Table elle-même.

0

Avez-vous envisagé:

var tab = new Table("tableName"); 

et

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

OTOH, si vous voulez une usine et tout le découplage qui peut vous donner, j'extraire une interface de table, et ont la usine retourner l'interface.

+0

L'ouverture d'une table nécessite l'appel d'un fournisseur sous-jacent, donc je casserais la règle "pas de travail dans le constructeur" si je n'utilisais qu'un constructeur. –

Questions connexes