课堂设计问题

时间:2009-12-18 20:42:16

标签: c# design-patterns

假设我有两个班级

class A 
{
   b bInstance;

   public A ( b newb )
   {
      this.bInstance = newb;
   }

}

class B
{
   // some data and methods go here
}

class List<A> 
{

   // list of A objects also holding reference to a B object

}

对于A的每个对象,都有一个相关对象B.

现在我想对A类和A类数据进行一些操作。 B,最好是在A类或集合类中创建新类或进行操作吗?

编辑:

我需要使用A类数据并将其与B类数据一起使用以创建最终结果。数据是分开的,所以我不想将它们合并到一个类中。这没有意义。

主要是字符串操作,因为数据是字符串数据。

最佳设计方法是什么?如果有的话?

5 个答案:

答案 0 :(得分:2)

将列表包含在对象B中会不会更简单?

class B 
{ 
   List<A> list;
   // some data and methods go here 
} 

然后你会在B级进行操作。

编辑:

根据你上面的评论,你应该在A类中进行操作,因为它总是包含对象B的引用,它将与它自己的状态一起使用,以生成你需要的任何输出。

答案 1 :(得分:1)

好吧,看起来你正在形成一个复合结构,其中B是A的辅助,所以A应该是其他对象的主要交互点。

答案 2 :(得分:1)

如果你按照编辑中提到的那样做,那么你的课程就会受到影响,因为它们会变得过于tightly coupled。 A不应该与B过于亲密,但一个好主意可能是将该类分成另一个可以处理A和B实例的类。

例如假设以下内容:

Issue->Action Item

一对多的经典例子......

你可以这样做:

class Issue {
//define issue properties
List<ActionItem> ai;
}

class Action Item {
//define action properties
//methods
}

但是,问题可能必须对行动项目了解太多。

最好引入中间体:

class IssueActionItems
{
//define props / methods
Issue i;
List<ActionItems> l;
}

答案 3 :(得分:1)

虽然我不清楚你问题的目的,但你可以这样做:

一对多关系

公司只能拥有一个原籍国。 但是一个国家可以有很多公司。

public class Country
{
    public int ID{get; set;}
    public string CountryName{get; set;}
    public List<Company> Items{get; set;}

    public int SaveOrUpdate(){}
    public static Country Get(int id){}
    public static List<Country> Get(){}
    public bool Delete(){}
}

public class Company
{
    public int ID {get; set;}
    public string CompanyName{get; set;}
    public int CountryID{get; set;}
    public Country Country{get; set;}

    public int SaveOrUpdate() {}
    public static Company Get(int id) {}
    public static List<Company> Get(){}
    public bool Delete() {} 
}

主 - 细节关系

public class Order
{
    public int ID {get;set;}
    public DateTime OrderDate {get;set;}
    public List<OrderDetail> Items {get;set;}

    public int SaveOrUpdate(){}
    public static Order Get(int id){}
    public static List<Order> Get(){}
    public bool Delete(){}
}

public class OrderDetail
{
    public int OrderID{get;set;}
    public string ProductName{get;set;}
    public double Price{get;set;}{get;set;}
    public Order Order {get;}

    public static void Save(TransactionContext tc, int masterID, List<OrderDetail> items){}
    public static void Delete(TransactionContext tc, int masterID){}
    public static List<OrderDetail> Get(TransactionContext tc, int masterID){}
}

答案 4 :(得分:0)

我会在DDD中创建一个单独的经典服务模型。然后,您可以将A和B对象传递给服务类,它将对它们起作用。