因此,对象模型相当复杂且层次分明。 祖父接受是由祖父工厂创建的,在其构造函数中接受祖父库。在现有代码库中实现模拟仓库
一切都很好。
现在,当爷爷需要加载它的儿童它是如何做到这一点?
它如何知道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