C# C语言的面向对象方法#
我正在探索这一点,看看这一点是否有意义。例如,我有两个抽象对象:Customer和Tender。这种关系是一个客户可以有多个投标 如何在TestClient应用程序上实现以下目标:C# C语言的面向对象方法#,c#,oop,C#,Oop,我正在探索这一点,看看这一点是否有意义。例如,我有两个抽象对象:Customer和Tender。这种关系是一个客户可以有多个投标 如何在TestClient应用程序上实现以下目标: customer.InTender[0].ID=??? 用什么方法来处理这个问题?我需要将CustomerID传递到Customer构造函数中才能实现这一点还是 如果我想获得该特定客户的所有投标书,我应该这样做: customer.InTender.Get() 如何区分所有投标与所有客户投标(第3点)。我想是
customer.InTender[0].ID=???
用什么方法来处理这个问题?我需要将CustomerID
传递到Customer
构造函数中才能实现这一点还是
customer.InTender.Get()
inTender.Get()
1) 不要使用ArrayList,它是从.net 2.0开始折旧的。您应该使用列表、IList或字典 而且,Customer sure看起来像是具体的类型。您将拥有多个都从中继承的客户类吗?如果没有,请删除摘要。你的其他课程也一样 2) 查找存储库对象和LazyLoading。Davy Bryon有一个关于构建自己的DAL的好系列 但是,要么客户应该立即获得所有投标书,要么您应该提供一项服务,为您获取投标书。我不赞成让实体知道它们的持久性 无论如何,一般的方法是使用一个单独的存储库类,该类具有获取所需数据所需的方法
public class CustomerRepository
{
public List<Customer> GetAllCustomers() { .... }
public List<Tenders> GetTendersForCustomer(Customer customer) { .... }
}
公共类CustomerRepository
{
公共列表GetAllCustomers(){..}
公共列表GetTendersForCustomer(客户客户){….}
}
我认为一个标准投标
类和一个标准客户
类以及一个属性列表
就足够了。我不明白为什么需要抽象类和继承
class Tender {}
class Customer {
List < Tender > tenders; // would be null if customer has no tenders
....
}
classtender{}
类客户{
列表<投标书>投标书;//如果客户没有投标书,则为空
....
}
这可能无关紧要,但我可以更好地理解您试图解决的问题,“投标”指的是什么?看起来像学校作业。请将所有代码缩进额外的4个空格,以将整个班级放入代码框中。旁注:请不要使用ArrayList。它已经过时多年了。使用列表。我修复了缩进,但是代码还是一团糟。这对我来说毫无意义。例如,当有一个名称为的受保护字段时,为什么会有一个抽象投标属性?这是一个ABC,不是一个接口,因此属性应该链接到字段,甚至可能不应该是虚拟的。这只是许多问题中的第一个,包括名称同时用于int和string。1)我开始在我的类中使用Abstrac。我过去常常直接在类的实现上编写代码。2) 根据您给我的代码,假设我想在myTestApp中测试这个类:List tenderColl;CustomerRepository customer=新CustomerRepository();tenderColl=customer.GetTenders();但我想在这样的情况下:CorporateCUstomer=新客户(21);Int64 tenderID=customer.Tender[0].ID//数组1的TenderID字符串tenderName=customer.Tender[0]。名称//数组1的tenderName您正在此处查找ActiveRecord样式的模式。传统上,这是一种糟糕的设计,因为您在对象中混合了责任。单一责任是关键。一个对象要么保存它的数据,要么知道如何保存自己。尽量不要把两者混为一谈。最终的结果是,您得到的代码很难测试,但也很难修改——代码中有太多的内容。投标者可能是“假装者”、“投标后者”、“意向者”
class Tender {}
class Customer {
List < Tender > tenders; // would be null if customer has no tenders
....
}