这是我正在尝试寻找合适设计的情况。
我需要存储数字资料。配置文件只是一系列数字。它们可以是int,float或小数类型。每个概要文件都有一个基于枚举的ProfileDescription字段。
每个概要文件都有一个ProfileVersion对象的集合。每个ProfileVersion对象都有一个ProfileValue对象的集合。这些ProfileValue对象是存储所需类型的实际数值的位置。
我最初的设计想法是使Profile,ProfileVersion和ProfileValue通用。当我想拥有一个不同类型的配置文件列表时,我遇到了一个问题。我可以改用ArrayList,但随后我必须将其中的数据删除。
我虽然可以使ProfileVersion和ProfileValue通用,然后让Profile Object根据ProfileDescription字段的值将类型分配给ProfileVersion,但是我找不到解决方法。
另一个想法是,我应该使用ProfileBase类,然后使用GenericProfileClass或IntProfile,FloatProfile和DecimalProfile对其进行子类化,但是与让每个类都是通用类相比,这实际上并没有给我带来任何好处,因为我必须淘汰该子类无论如何每次。
非常感谢您对这种情况的最佳设计方法的想法。
谢谢
最佳答案
Grzenio的想法是正确的。您的每个配置文件类都可以做成IProfile
对象的实现,然后您的容器可以是:
class ProfileList : IList<T> where T: IProfile
因此,您将拥有的唯一约束是接口,而不是特定的类型或强制转换的基类。
至于:
另一个想法是我应该使用
ProfileBase类,然后将其子类化
与GenericProfileClass或
IntProfile,FloatProfile和
DecimalProfile,但这不会
真的给我带来了任何优势
每个类都是通用的,就像我
将不得不淘汰子类
无论如何每次。
收益的确取决于您为类进行的抽象级别。如果设计正确,则理想情况下,您可以具有可以接受任何这些基本类型(同样通过泛型)的操作/业务逻辑/管理器类,而不必知道特定的类型。