我有代表同一个业务实体的不同类型的对象。
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 是我仅为验证目的而引入的构造。