我有代表同一业务实体的不同类型的对象。UIObjectPowershellObjectDevCodeModelObjectWMIObject都是同一实体的不同表示形式。

所以说如果实体是Animal,那么我就有AnimalUIObjectAnimalPSObjectAnimalModelObjectAnimalWMIObject等。

现在AnimalUIObjectAnimalPSObjectAnimalModelObject的实现都在单独的程序集中。

现在,我的场景是我想验证业务实体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进行验证。

09-26 16:50