因此,對象模型相當複雜且層次分明。 祖父接受是由祖父工廠創建的,在其構造函數中接受祖父庫。在現有代碼庫中實現模擬倉庫
一切都很好。
現在,當爺爺需要加載它的兒童它是如何做到這一點?
它如何知道ChildFactory和ChildRepository?它不應該糾正?
但是它是如何加載它們的?我不認爲你將一個ChildFactory傳遞給祖父構造函數,就好像你有孫輩(這個應用程序所做的那樣),你也需要傳遞一個孫子工廠!
你實例某種EverythingFactory的有各種不同類型的工廠的它的內部並傳遞到每一個構造函數,他們利用他們所關心的一個嗎?
還是有一些簡單的解決方案,我只是沒有看到?
目前所有對象調用web服務來加載自己的數據,我試圖拉了這一點,並作出庫接口,可模擬來測試的目的。
編輯: 忽略工廠,我不需要他們,我想我只是過分複雜的東西。
目前的對象由散佈在對象的web服務調用的方式加載其數據和子數據。
大多數對象的構造函數被標記爲私有,並且他們有靜態方法,如「LoadByID(INT)」,以從數據庫中檢索它們。
然後當它包含它的子方法的屬性被引用,如果它是私有的「子榜」變量是空的,它調用Child.GetAllChildrenFor(本);這是Child的靜態方法,「this」是Parent類。它調用webservice,創建所有Childs,並返回它們的列表,每個列表都有一個對其父項的引用。
我知道這是不正確的...但我不知道我出了什麼問題,或者如何糾正它能夠刪除Web服務調用,並放入一個Repository接口,可以是真實還是模擬......以及我在哪些代碼中設置了哪個使用!
EDIT2: 代碼是東西沿着這些路線目前
public interface IEntity
{
int ID { get; set; }
}
public class Parent : IEntity
{
public int ID { get; set; }
private Children children;
public Children Children
{
get
{
if (this.children == default(Children))
{
this.children = Children.GetChildrenFor(this);
}
return this.children;
}
}
}
public class Children : List<Child>
{
private Children() { }
public static Children GetChildrenFor(Parent parent)
{
Children children = new Children();
DataSet childrenDataSet = new DataSet();
using (webservice)
{
childrenDataSet = webservice.Retrieve(parent.ID)
}
if (childrenDataSet.HasRows())
{
foreach (DataRow dr in childrenDataSet.Tables[0].Rows)
{
Child rr = Child.LoadByDataRow(dr);
rr.Parent = parent;
children.Add(rr);
}
}
return children;
}
}
public class Child : IEntity
{
public Parent Parent { get; set; }
public int ID { get; set; }
internal static Child LoadByDataRow(DataRow dr)
{
Child child = new Child();
child.ID = dr.Field<int>("ID");
child.GrandChild = GrandChildren.GetGrandChildrenFor(this);
return child;
}
}
你應該添加一些代碼來更好地說明你在這裏做什麼。 – 2009-12-11 07:30:29