我正在探索这个,看看这个是否有意义。例如,我有两个抽象对象:Customer和Tender。关系是一个客户可以有很多招标。
如何在TestClient应用程序上实现以下功能:
customer.InTender[0].ID = ???
要处理此问题的方法是什么?我是否需要将CustomerID
传递给Customer
构造函数才能实现此目的或......?
如果我想获得该特定客户的所有投标,我应该这样做:
customer.InTender.Get()
如何区分所有投标VS所有客户投标(第3点)。我猜它会是这样的。一个ID为Customer,另一个没有?
inTender.Get()
public abstract class Customer
{
protected Int64 id;
protected string name;
protected ArrayList tender;
public abstract ArrayList Tender
{
get;
set;
}
public abstract Int64 ID
{
get;
set;
}
public abstract string Name
{
get;
set;
}
public abstract bool Update();
public abstract bool Add();
public abstract bool Delete();
}
public class CorporateCustomer : Customer
{
public CorporateCustomer ()
{}
public override ArrayList Tender
{
get
{
return tender
}
set
{
tender = value;
}
}
public override Int64 ID
{
get
{
return id;
}
set
{
id = value;
}
}
public override string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public override bool Update()
{
return true;
}
public override bool Add()
{
return true;
}
public override bool Delete()
{
return true;
}
}
public abstract class Tender
{
protected Int64 id;
protected string name;
public abstract bool Update();
public abstract bool Add();
public abstract bool Delete();
}
public class InTender : Tender
{
public InTender ()
{}
public override Int64 ID
{
get
{
return id;
}
set
{
id = value;
}
}
public override string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public override bool Update()
{
return true;
}
public override bool Add()
{
return true;
}
public override bool Delete()
{
return true;
}
}
答案 0 :(得分:2)
1)不要使用ArrayList,它从.net 2.0开始折旧。您应该使用List,IList或Dictionary。
此外,客户肯定看起来像具体类型。您是否会拥有多个从中继承的Customer类?如果没有,请删除摘要。你的其他课程也一样。
2)查找Repository对象和LazyLoading。 Davy Bryon有一个关于构建自己的DAL的好系列。 http://davybrion.com/blog/2009/08/build-your-own-data-access-layer-lazy-loading/
但是,客户应该立即拥有所有招标,或者您应该拥有能够为您提供服务的服务。我并不赞成让实体知道他们的坚持。
无论如何,一般的方法是使用一个单独的Repository类,它具有获取所需数据所需的方法。
public class CustomerRepository
{
public List<Customer> GetAllCustomers() { .... }
public List<Tenders> GetTendersForCustomer(Customer customer) { .... }
}
答案 1 :(得分:0)
我认为标准的Tender
类和带有属性Customer
的标准List < Tender >
类就足够了。我不明白你为什么需要抽象类和继承。
class Tender {}
class Customer {
List < Tender > tenders; // would be null if customer has no tenders
....
}