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