c#-在构造函数以外的地方构建结构/对象

提问

我有代表同一业务实体的不同类型的对象.
UIObject,PowershellObject,DevCodeModelObject,WMIObject都是同一实体的不同表示形式.

假设实体是动物,那么我有AnimalUIObject,AnimalPSObject,AnimalModelObject,AnimalWMIObject等.

现在,AnimalUIObject,AnimalPSObject,AnimalModelObject的实现都在单独的程序集中.

现在,我的场景是我想验证业务实体Animal的内容,而不论其来自哪个程序集.因此,我创建了一个GenericAnimal类来表示Animal实体.

现在,在GenericAnimal中,我添加了以下构造函数:

GenericAnimal(AnimalUIObject)
GenericAnimal(AnimalPSObject)
GenericAnimal(AnimalModelObject)

基本上,我使GenericAnimal依赖于所有基础程序集,以便在验证时可以处理此抽象.

现在执行此操作的另一种方法是让GenericAnimal使用空的构造函数
允许这些基础程序集具有Transform()方法,该方法将构建GenericAnimal.

两种方法都有优点和缺点:

第一种方法:
优点:所有构造逻辑都在一类GenericAnimal中合而为一
缺点:每次有新的表示形式时,都必须触摸GenericAnimal类.

第二种方法:
优点:将施工职责委托给基础装配.
缺点:由于构造逻辑遍及程序集,明天如果我需要在GenericAnimal中添加属性X,则必须触摸所有程序集以更改Transform方法.

哪种方法看起来更好?
或您认为哪个邪恶程度较小?
有没有比以上两种更好的替代方法?

只是为了根据我收到的评论进一步阐述.
我不能奢侈地修改基础对象的结构,即不能更改AnimalUIObject AnimalPSObject等.GenericAnimal是一种仅出于验证目的而引入的结构.

最佳答案

我认为这两种方法都非常“邪恶”.

我认为您真正需要的是从Animal类作为核心类开始,然后使其余所有使用Animal类来保存表示形式的包装类.然后针对动物API进行验证.