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

C# 如何最好地定义聚合关系?,c#,relationship,aggregation,class-diagram,C#,Relationship,Aggregation,Class Diagram,很抱歉,我找不到更好的问题格式 我有两门课:设计课、色彩课 设计类可以有多种颜色,对于每种颜色,设计可以指定一些属性,例如设计颜色组合的名称 然后我有一个面料类,它有一个设计颜色组合 实现这些类之间的这种关系的适当方式是什么 以下是一个我认为是错误的建议模型: class Design { public string Name { get;set;} public int StringNumber {get;set;} ///some other properties. } c

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

我有两门课:设计课、色彩课

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

然后我有一个面料类,它有一个设计颜色组合

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

以下是一个我认为是错误的建议模型:

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;}
}
设计和颜色之间缺少一种关系,这种关系指定了单个设计的可能颜色

该应用程序适用于一家织物工厂

首先,它们定义了设计及其颜色,并定义了指定设计中每种颜色在一种称为“清洗方式”的属性中的制备方式,以及每种设计中每种颜色唯一的许多其他属性

因此,每种面料都必须说明它属于什么颜色和设计

例如:假设我有一个名为A的设计 它有以下几种颜色:

红色:彩色设计名称:A-RD,洗涤方式:W1 绿色:彩色设计名称:A-GN洗涤方式:W2 蓝色:彩色设计名称:A-BL洗涤方式:W3 然后我可以有一个a-RD的面料,长度为100米


和另一种A-BL和200米长的织物。

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

我不确定你是否关心DDD,但从你的问题来看,我可以说你的情况很好。对我来说,设计和颜色之间的关系可以是一种有效的彩色设计或彩色设计抽象。设计和颜色只是组成另一个抽象的一部分,在模型中很重要。因此,您介绍的织物类是一件非常好的事情。它可能包含创建彩色设计对象的逻辑,包含如何构造的约束,等等。然后,客户端不关心创建逻辑,也不耦合到它所使用的对象的创建约束


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

我建议您在Design类中设置一个属性public Color[]AvailableColors{get;set;},以表示某些颜色的设计可用性。然后,在Fabric中,您可能有Design和Color两个属性,如果Fabric颜色是设计可用颜色之一,请在业务逻辑中进行检查。我建议您删除ColoredDesign类,因为在我看来,没有织物,设计和颜色之间的真正联系就没有意义。如果出于任何原因,您坚持使用ColoredDesign类,您应该检查ColoredDesign的颜色,而不是我前面提到的织物的颜色。如果您保持彩色设计,它将如下所示:


我错过什么了吗?问题还不清楚吗?事实上,设计和颜色之间的关系是有意义的,并且有许多属性没有提到,但我可能没有解释清楚。我将对问题进行编辑以添加更多细节。我忘了说,不仅要指定可用的颜色,还要指定每种颜色与设计的连接方式的更多细节,例如洗涤方式、可以安装组合的机器,组合中每1米的重量。。。。etc@Nour洗涤方式是只取决于颜色还是设计?机器的选择如何,取决于颜色、设计和洗涤方式吗?同样的问题是每1米的重量取决于什么组合?它们都取决于颜色和设计。因此,对于一种设计,红色可以有一种洗涤类型,而对于另一种设计,红色可以有另一种洗涤类型,同样适用于机器和重量。@Nour如果它们都依赖于颜色和设计,则将它们全部放在ColoredDesign类中,但将其命名为更具意义的名称以反映其新角色。