2009-04-19 73 views
0

我有一个ObjectA,其属性值将始终分配给另一个对象的(ObjectB)属性。我一直在做的是让一个服务类实例化接收ObjectB,然后将这些值从ObjectA分配给新对象。我是不是应该使用setter参数或其他方法将整个objectA直接发送到Object B?如果有的话,什么是最佳实践?从另一个对象中分配新的对象值

编辑: 在服务类:

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

OR

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

OR

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

OR

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

这是一个关于'构造参数'与'空构造函数然后setter'相关的问题?或者关于传递'Foo(objA)'与'Foo(objA.Prop1,objA.Prop2,objA.Prop3)'有关的问题?或者是其他东西? – Brian 2009-04-19 02:29:48

回答

2

这很难回答,因为我们不知道这些类是什么。你可能会说,“哦,我会一直传递到对象A对象B的构造函数”和风与...

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

...什么一样荒谬。有很多方法可以做你想做的事情,“正确方式”的根本问题完全取决于你在做什么。

2

听起来像有一个对象B的构造函数,只有一个参数,一个对象:

// 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或返回值来完成此操作)。正如我所说的,在这种情况下,我不想使用构造函数或类/实例方法的主要原因是您现在将两种类型绑定在一起,因为它们可能不一定非得真正了解对方。

0

你有没有考虑用AutoFac进行依赖注入?它允许你在实际做任何事情之前声明关系。然后很好地制作,使用和清理。

相关问题