Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言的面向对象方法#_C#_Oop - Fatal编程技术网

C# C语言的面向对象方法#

C# C语言的面向对象方法#,c#,oop,C#,Oop,我正在探索这一点,看看这一点是否有意义。例如,我有两个抽象对象:Customer和Tender。这种关系是一个客户可以有多个投标 如何在TestClient应用程序上实现以下目标: customer.InTender[0].ID=??? 用什么方法来处理这个问题?我需要将CustomerID传递到Customer构造函数中才能实现这一点还是 如果我想获得该特定客户的所有投标书,我应该这样做: customer.InTender.Get() 如何区分所有投标与所有客户投标(第3点)。我想是

我正在探索这一点,看看这一点是否有意义。例如,我有两个抽象对象:Customer和Tender。这种关系是一个客户可以有多个投标

如何在TestClient应用程序上实现以下目标:

  • customer.InTender[0].ID=???

    用什么方法来处理这个问题?我需要将
    CustomerID
    传递到
    Customer
    构造函数中才能实现这一点还是

  • 如果我想获得该特定客户的所有投标书,我应该这样做:

     customer.InTender.Get()
    
  • 如何区分所有投标与所有客户投标(第3点)。我想是这样的。一个有客户ID,另一个没有

     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
         ....
    }