我会稍微抽象地说一下,使问题陈述简明扼要。出于所有目的,我们假设.NET / C#是底层技术/语言。
假设您正在编写软件程序并设计一些类/类型来表示某些感兴趣的实体。您会发现此实体具有某种具有不同状态的生命周期。当这个实体从一个州转移到另一个州时,它们会获得某些属性/属性,但会失去其他属性。
现在,如果您正在设计一个类/类型来表示这样的实体,那么一个设计选择就是引入一个包罗万象的类类型,其中包括实体在其整个生命周期中所有可能属性的超集。
另一种选择是引入某种类型的层次结构,您可以使用不同的类型来表示感兴趣的实体,每种类型都代表特定的状态。
现在我的问题是:
一般来说,如何使用单一类型与不同类型的属性/属性来决定是否更好地表示实体的不同状态/方面?
如果您选择使用多种类型代表您的实体:
一个。您如何处理在多个州存在/定义该实体的某些属性的情况?
湾如果您的实体使用JSON持久化/序列化怎么办?如果代表不同状态的所有不同类型,您将如何序列化并反序列化?
答案 0 :(得分:2)
你的解决方案都不是特别好。你真正想要的是代数数据类型,a.k.a。不相交或有区别的联合。不幸的是,大多数老式的OO语言都没有。在.NET生态系统中,主要是F#对它们有适当的支持。参见例如here或here进行简要介绍。
答案 1 :(得分:0)
你可能想要考虑在.net ExpandoObject(MSDN link) - 周围建立这样一个对象 - 你可以动态地添加/删除它的属性并查询它是否具有给定的属性。这比你试图提供更多的灵活性预先创建一个完整的(静态)层次结构。
答案 2 :(得分:0)
如果需要使用多种类型,可以通过复制构造或使用工厂创建新类型的实例,将实例从一种类型升级到另一种类型。
但是,我不会单独依赖类型层次结构,因为内部状态在状态机中是不可避免的。