У меня небольшая проблема с дизайном класса. Я опишу три модели, которые я рассматриваю.
Пример 1:
Class MyObject
{
public MyObject(IWrapper wrapper,string name)
{//set properties.}
public Void Declare()
{
//Some COM stuff with IWrapper
}
}
Используйте
MyObject testobj = new MyObject(fakewrapper,"test");
testobj.Declare();
Пример 2:
Class MyObject
{
public MyObject(IWrapper wrapper,string name)
{ //set properties.}
public MyObject Declare()
{
//Some COM stuff with IWrapper
return this;
}
}
Используйте
MyObject testobj = new MyObject(fakewrapper,"Test");
testobj = testobj.Declare();
Пример 3. Использование частного конструктора
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);
}
}
Используйте
MyObject testobj = MyObject.Declare(fakewrapper,"Test");
Мои основные вопросы:
Какой из них вы считаете лучшим дизайном?
Это плохая практика, чтобы скрыть конструктор в пользу статического метода фабрики?
Я также пытаюсь сделать это как можно более тестируемым.
Единственная причина, по которой я не могу определиться, заключается в том, что класс MyObject является оберткой вокруг другого объекта в приложении COM.
Проблема заключается в том, что этот объект должен быть объявлен в приложении COM, что и делает метод объявления *1038*, прежде чем будет вызван любой другой метод, но если я спрячу конструктор, а затем добавлю больше работы к методу Declare, я думаю, что это затруднит тестирование остальной части класса, потому что мне сначала нужно пройти через метод Declare.
Приветствие.