如何最好地定义聚合关系?

时间:2011-06-16 16:40:18

标签: c# relationship aggregation class-diagram

抱歉,我找不到更好的问题格式。

我有两个班级(设计,颜色)

设计类可以有多种颜色,对于每种颜色,设计可以指定一些属性,例如(Design-Color)组合的名称。

然后我有一个Fabric类,它有一个Design-Color组合。

在这些类之间实现这种关系的适当方法是什么?

这是一个建议的模型(我认为是错误的):

class Design {
   public string Name { get;set;}

   public int StringNumber {get;set;}

///some other properties.
}

class Color {
   public string Name { get;set;}

///some other properties.
}

class ColoredDesign {
public Color Color { get;set;}

public Design Design { get;set;}

public string ColoredDesignName { get;set;}

public string WashingWay { get;set;}
}

class Fabric {
public ColoredDesign {  get;set;}

public float Length { get;set;}
}

设计与颜色之间缺少关系,指定了单一设计的可能颜色。

该应用程序适用于Fabric工厂,

首先,他们定义设计及其颜色,并定义指定设计中的每种颜色在称为洗涤方式的属性中的准备方式,以及每种设计中每种颜色唯一的许多其他属性。

因此每个Fabric必须告诉它属于哪种颜色和设计。

例如:假设我的设计名为(A) 它有以下颜色:

  • 红色:ColoredDesignName:(A-RD),洗涤方式:W1
  • 绿色:ColoredDesignName:(A-GN)洗涤方式:W2
  • 蓝色:ColoredDesignName:(A-BL)洗涤方式:W3

然后我可以拥有一个(A-RD)长度为100M的Fabric。

和另一种(A-BL)和200 M长度的织物。

2 个答案:

答案 0 :(得分:0)

回答您的问题并不容易,因为缺少的部分与经常推动设计的业务需求有关。我几年来一直在做DDD,在制作模型时对我有很大帮助,这是一个商业语言(翻译成UL)以及我应该考虑的要求。

我不确定你是否担心DDD,但从你的问题我可以说你在好的轨道上。对我来说,Design和Color之间的关系可以实际上是ColoredDesign或ColouredDesign抽象。设计和颜色只是你构成另一个抽象的一部分,这对你的模型很重要。因此,您的Fabric类是您介绍的非常好的东西。它可能包含创建ColouredDesign对象的逻辑,包含如何构造它的约束等等。然后客户端不关心创建逻辑,也没有耦合到它消耗的对象的创建约束。

因此,从我可以在你的问题中看到的一些细节,我认为这是一个可行的设计。也许其他人对此有另一种观点。

答案 1 :(得分:0)

我建议您在public Color[] AvailableColors{get;set;}类中创建一个属性Design,以表示某些颜色的设计可用性。然后在Fabric中,如果布料颜色是设计可用颜色之一,则可能有两个“设计”和“颜色”属性,并检查业务逻辑。我建议您删除ColoredDesign类,因为如果没有Fabric,IMO设计和颜色之间的真正连接没有意义。如果由于任何原因你坚持要求ColoredDesign课程,你应该检查ColoredDesign的颜色,而不是我之前提到的Fabric。如果你保留ColoredDesign,它将如下:

enter image description here