2009-04-19 84 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進行依賴注入?它允許你在實際做任何事情之前聲明關係。然後很好地製作,使用和清理。

相關問題