该图令人困惑,因为它只显示关联,但以意想不到的方式重新组合它们。它看起来更像是决策树而不是真正的类图。
您需要考虑的第一个改进:
Pfizer BioNTech
,Moderna
并且AstraZeneca
每个都是Vaccine
:您应该通过从特定疫苗到一般疫苗的概括来证明这一点vaccine
。
age 65+
似乎不是一个类的好候选人:一个类的对象在它的整个生命周期中都保持着这个类。但是公民在 65 岁时不会改变阶级。年龄是 的(派生)属性Citizen
。此外,“ 65 岁以上的人不能接种阿斯利康疫苗”这一措辞也是一种限制的表达。
最后,如果您管理疫苗,您还需要管理注射。当你写“公民只能得到一个”时,你可能是指“一种”:你提到的疫苗原则上需要打两针。而在世界上大多数国家,两次注射必须是同一种疫苗,这是另一个限制。剩下的问题是 65+ 约束适用于第一个镜头还是第二个镜头?
这将导致我们得到一个如下所示的图表:
额外的想法:
您可以通过使关联Vaccination
成为关联类来管理镜头。
关于开放/封闭原则存在一个问题:如果您要添加新疫苗,则可能必须对某些疫苗添加不同的限制。备择方案:
Vaccine
一个抽象类(或接口),还有一些需要由具体类实现的操作:getRequiredMinAge()
, getRecommendedMinAge()
, getRecommendedMaxAge()
, getrequiredMaxAge()
, 而不是对约束进行硬编码。Vaccine::checkCompatibility(c: Citizen)
将约束验证转移到Vaccine
类的方法人们可能想知道是否真的需要对疫苗进行子分类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句