我有代表同一业务实体的不同类型的对象。UIObject
,PowershellObject
,DevCodeModelObject
,WMIObject
都是同一实体的不同表示形式。
所以说如果实体是Animal
,那么我就有AnimalUIObject
,AnimalPSObject
,AnimalModelObject
,AnimalWMIObject
等。
现在AnimalUIObject
,AnimalPSObject
和AnimalModelObject
的实现都在单独的程序集中。
现在,我的场景是我想验证业务实体Animal
的内容,而不论其来自哪个程序集。因此,我创建了一个GenericAnimal
类来表示Animal
实体。
现在在GenericAnimal
中,我添加了以下构造函数:
GenericAnimal(AnimalUIObject)
GenericAnimal(AnimalPSObject)
GenericAnimal(AnimalModelObject)
基本上,我使
GenericAnimal
依赖于所有底层程序集,以便在验证时可以处理此抽象。现在,另一种方法是使用带有空构造函数的
GenericAnimal
允许这些基础程序集具有Transform()
方法,该方法将构建GenericAnimal
。两种方法都各有利弊:
第一种方法:
优点:所有构造逻辑都在一个类
GenericAnimal
中合而为一缺点:每次有新的表示形式时,必须触摸
GenericAnimal
类。第二种方法:
优点:将施工职责委托给基础装配。
缺点:由于构造逻辑遍及程序集,明天如果我需要在
X
中添加属性GenericAnimal
,则必须触摸所有程序集以更改Transform
方法。哪种方法更好?
还是您认为哪个邪恶程度较小?
有没有比以上两种更好的替代方法?
只是为了根据我收到的评论进一步阐述。
我没办法修改基础对象的结构,即我不能更改AnimalUIObject AnimalPSObject等。GenericAnimal是一种仅出于验证目的而引入的结构。
最佳答案
我认为这两种方法都相当“邪恶”。
我认为您真正需要的是从Animal
类作为核心类开始,并使用Animal
类保留其余类的包装类。然后针对动物API进行验证。