2009-04-19 2 views
0

У меня есть ObjectA, значения свойств которого всегда будут присваиваться свойствам другого объекта (ObjectB). То, что я делал, состоит в том, чтобы создать класс обслуживания, создающий объект ObjectB, и затем присваивать значения новому объекту из ObjectA. Должен ли я вместо этого отправлять объект ObjectA непосредственно в объект B в параметре сеттера или другом методе? Каковы лучшие практики здесь, если они есть?Назначение новых значений объекта из другого объекта

EDIT: в классе обслуживания:

public AssignValues (objectA) 
{ 
ObjectB objectB= new ObjectB(); 
objectB.prop1= ObjectA.prop1; 
objectB.prop2= ObjectA.prop2; 
} 

ИЛИ

public AssignValues(objectA) 
{ 
ObjectB objectB= new ObjectB(); 
objectB.SetValuesFromObjectA= objectA; 
} 

ИЛИ

public AssignValues(objectA) 
{ 
ObjectB objectB= new ObjectB(); 
objectB.SetValuesFromObjectA(objectA); 
} 

ИЛИ

public AssignValue(objectA) 
{ 
ObjectB objectB= new ObjectB(objectA); 
} 
+1

Это вопрос о «параметре конструктора» по сравнению с «пустым конструктором, а затем сеттер»? Или вопрос о передаче «Foo (objA)» по сравнению с «Foo (objA.Prop1, objA.Prop2, objA.Prop3)»? Или что-то другое? – Brian

+0

как второй, но есть еще один класс обслуживания, который просто присваивает Foo.prop1 = objA.prop1, Foo.prop2 = objA.prop2 и т. Д. – zsharp

ответ

2

Трудно ответить, потому что мы не знаем, что представляют собой эти классы. Можно сказать: «О, я всегда буду проходить Objecta конструктору objectB» и ветер с ...

public Chicken(Gorilla g) 
{ 
    this.IsAlive = g.IsAlive; 
} 

... или что-то столь же бессмысленный. Существует так много способов сделать то, что вы хотите сделать, фундаментальный вопрос о «правильном пути» полностью зависит от того, что вы делаете.

2

Похоже, есть конструктор объекта б, который принимает один параметр, объект A:

// ctor: 
ObjectB(const ObjectA& a) { 
    prop1= a.prop1; 
    prop2= a.prop2; 
} 

// or ctor: 
ObjectB(const ObjectA& a) : prop1(a.prop1), prop2(a.prop2) { 
} 

. . . 
// use 
ObjectB b(a); 
0

Если объекты одного и того же типа, я бы, вероятно, предпочитают использовать Clone() (неглубокий ксерокопию) метод.

Если объекты разных типов, я бы, вероятно, написал метод, который выглядит как ваш первый случай, чтобы разделить два типа. При желании я мог бы сделать это как метод расширения, который принимает объекты ObjectA и objectB (если одна из них является структурой, возможно, вам придется сделать это с помощью ref или return value). Как я уже сказал, основной причиной, по которой я бы не хотел использовать конструктор или метод класса/экземпляра, в этом случае является то, что вы теперь связываете два типа вместе, когда они не обязательно должны действительно знать друг о друге.

0

Вы считали инъекцию зависимостей с помощью AutoFac? Это позволяет вам объявлять, каковы отношения, прежде чем что-либо делать. Затем сделайте, используйте и очистите красиво.

Смежные вопросы