Je suis un peu un problème de conception de classe. Je vais décrire les trois modèles que je considère.Conception de classe: constructeur public ou privé avec usine statique et un objet COM
Exemple 1:
Class MyObject
{
public MyObject(IWrapper wrapper,string name)
{//set properties.}
public Void Declare()
{
//Some COM stuff with IWrapper
}
}
utilisation:
MyObject testobj = new MyObject(fakewrapper,"test");
testobj.Declare();
Exemple 2:
Class MyObject
{
public MyObject(IWrapper wrapper,string name)
{ //set properties.}
public MyObject Declare()
{
//Some COM stuff with IWrapper
return this;
}
}
Utilisation:
MyObject testobj = new MyObject(fakewrapper,"Test");
testobj = testobj.Declare();
Exemple 3: Utilisation de constructeur privé
Class MyObject
{
private MyObject(IWrapper wrapper,string name)
{//set properties.}
public static MyObject Declare(IWrapper wrapper,string name)
{
//Some COM stuff with IWrapper
return new MyObject(wrapper,name);
}
}
Utilisation:
MyObject testobj = MyObject.Declare(fakewrapper,"Test");
Mes principales questions sont; Selon vous, quel est le meilleur design?
Est-ce une mauvaise pratique de masquer le constructeur en faveur d'une méthode d'usine statique? J'essaie aussi de rendre ceci aussi testable que possible. La seule raison pour laquelle je n'arrive pas à me décider est que la classe MyObject est un wrapper autour d'un autre objet dans une application COM.
Le problème est que cet objet doit être déclaré dans l'application COM qui est ce que le déclare méthode fait avant toute autre méthode peut être appelée, mais si je cache le constructeur, puis ajouter plus de travail à la Declare méthode Je pense que cela rendra le reste de la classe difficile à tester, car je dois d'abord passer par la méthode Declare.
Cheers.