我有一个包含很多功能的类,称为Record
. 在系统中存在两种基本类型的记录,它们的主键是uint
,主键是Guid
。
该类Record
包含我需要的所有功能,除了一个属性。Record.ID
允许开发人员将当前主键读取为正确的类型(uint
或Guid
)。
为了实现这一点,我必须创建三个这样的类(简化示例):
class Record {
... lots of code ...
}
class RecordInt : Record {
public uint ID { get; set; }
}
class RecordGuid : Record {
public Guid ID { get; set; }
}
这工作正常,但它引入了一个问题,即数据模型不能只创建一个通用Record
实例。他们必须知道派生类是否期望RecordInt
或RecordGuid
. 所以我为这样的模型添加了一个模板参数。
class abstract class Model<T> : were T : Record, new()
{
... lots of generic code that uses T ...
// example
public List<T> Find(...) {
.. find a record ...
return new List<T>();
}
}
这给我带来的问题不仅仅是拥有两种Record
类型的好处。现在,当我实例化一个模型时,代码必须知道Record
需要什么类型。如果这发生在应该是通用的部分中,那么我必须添加另一个模板参数。
过了一段时间,我发现开始有很多使用模板参数的方法。只是这样可以将类型传递给Model<RecordGuid>
,有时我必须将模板参数传递到几个方法调用的链中,然后才能到达真正需要它的代码。
有没有比我正在做的更有效的模式?
编辑:
Model
使用模板参数的一个原因是它需要具有返回Record
. 在 C# 中,您不能强制List<Record>
转换为,List<RecordGuid>
因此我不得不使用模板参数作为返回类型作为List<T>
.