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类中,但将其命名为更具意义的名称以反映其新角色。