面向对象的C#方法

时间:2009-09-09 03:32:05

标签: c# oop

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

如何在TestClient应用程序上实现以下功能:

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

    要处理此问题的方法是什么?我是否需要将CustomerID传递给Customer构造函数才能实现此目的或......?

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

    customer.InTender.Get()
    
  3. 如何区分所有投标VS所有客户投标(第3点)。我猜它会是这样的。一个ID为Customer,另一个没有?

    inTender.Get()
    

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

2 个答案:

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