2009-04-19 6 views
0

J'ai une ObjectA dont les valeurs de propriété seront toujours affectées aux propriétés (ObjectB) d'un autre objet. Ce que j'ai fait est d'avoir une classe de service instancier l'ObjectB qui reçoit, puis assigner les valeurs au nouvel objet à partir de ObjectA. Dois-je envoyer l'objet A entier directement à l'objet B dans un paramètre setter ou une autre méthode? Quelles sont les meilleures pratiques ici, le cas échéant?Affectation de nouvelles valeurs d'objet à partir d'un autre objet

EDIT: Dans une classe de service:

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

OU

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

OU

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

OU

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

S'agit-il d'une question sur le 'paramètre constructeur' par rapport à 'constructeur-vide puis sur setter'? Ou une question sur la transmission de 'Foo (objA)' versus 'Foo (objA.Prop1, objA.Prop2, objA.Prop3)'? Ou autre chose? – Brian

+0

comme la seconde, mais il existe une autre classe de service qui affecte simplement Foo.prop1 = objA.prop1, Foo.prop2 = objA.prop2 etc. – zsharp

Répondre

2

Il est difficile de répondre parce que nous ne savons pas ce que sont ces classes. Vous pourriez dire: « oh, je vais toujours passer objectA au constructeur de objectB » et le vent avec ...

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

... ou quelque chose comme absurde. Il y a tellement de façons de faire ce que vous voulez faire, la question fondamentale de la «bonne façon» dépend complètement de ce que vous faites.

2

Sons comme il y a un constructeur objet b qui prend un seul paramètre, un objet 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

Si les objets sont du même type, je préfère probablement utiliser un Clone() (copie peu profonde) méthode.

Si les objets sont de types différents, j'écrirais probablement une méthode qui ressemble à votre premier cas pour garder les deux types séparés. Facultativement, je pourrais le faire comme une méthode d'extension qui prend objectA et objectB (si l'un est une struct, vous pourriez avoir à le faire par ref ou return value). Comme je l'ai dit, la raison principale pour laquelle je ne voudrais pas utiliser un constructeur ou une méthode de classe/instance dans ce cas est que vous associez maintenant les deux types quand ils ne doivent pas forcément nécessairement se connaître les uns les autres.

0

Avez-vous considéré l'injection de dépendance avec AutoFac? Cela vous permet de déclarer quelles sont les relations avant de faire quoi que ce soit. Ensuite, fabriquez, utilisez et nettoyez bien.

Questions connexes