C# 泛型-将实例作为基类型传递
我目前正在为我们的新应用程序开发数据访问层,它不是一个大型应用程序,因此我决定使用Dao模式,在通过存储查询将每个模型项存储到数据库之前,将其转换为Dao项。C# 泛型-将实例作为基类型传递,c#,templates,generics,C#,Templates,Generics,我目前正在为我们的新应用程序开发数据访问层,它不是一个大型应用程序,因此我决定使用Dao模式,在通过存储查询将每个模型项存储到数据库之前,将其转换为Dao项。 我尽可能多地使用通用接口和抽象类来消除重复操作,但现在遇到了一些障碍。 我们有一个Dao转换类的接口,如下所示: internal interface IDaoConverter<TModel, TDao> where TModel : ModelItem where TDao : DaoItem {
我尽可能多地使用通用接口和抽象类来消除重复操作,但现在遇到了一些障碍。
我们有一个Dao转换类的接口,如下所示:
internal interface IDaoConverter<TModel, TDao>
where TModel : ModelItem
where TDao : DaoItem
{
ToDao(TModel inModel);
inDao);
}
内部接口IDaoConverter
其中TModel:ModelItem
其中TDao:dao项目
{
ToDao(TModel inModel);
英道);
}
到目前为止,它工作得很好,并且适合它的函数。您可以在类定义中指定模型类型和它将转换为的Dao类型(1-1关系),并创建与这些类型匹配的函数。这些Dao转换器的实例存放在工厂中,以便于检索
下一步我要做的是创建数据访问类,这些类将使用它,我想用一种通用的方式来设计它
我想要的是一种方法,让Dao转换器工厂知道我想要一个可以处理特定类型的模型项的Dao转换器,但到目前为止,我找不到一种方法来指定它
public abstract class AbstractDataAccess<T> where T: ModelItem
{
protected IDaoConverter<T,?> Converter;
public void Init(IDaoConverter<T,?> inConverter)
{
Converter = inConverter;
}
}
公共抽象类AbstractDataAccess,其中T:ModelItem
{
受保护的IDaoConverter转换器;
public void Init(IDaoConverter inConverter)
{
转换器=换流器;
}
}
我基本上希望能够在课堂上用我想要的任何类型来替换问号。由于这个原因,我目前不得不完全写出每个数据访问类。如果在初始化时给出了转换器,那么可以将访问DaoConverter的方法抽象化,并派生一个(可能是抽象的)类,该类具有表示Dao类型的第二个类型参数
public abstract class AbstractDataAccess<T, TDao> : AbstractDataAccess<T> where ...
公共抽象类AbstractDataAccess:AbstractDataAccess,其中。。。
为什么不使用AutoMapper?您在界面上使用泛型,但是。。。如果您明确告诉TDao
是一个DaoItem
类,为什么不使用DaoItem-ToDao(TModel-inModel)等方法将其声明为内部接口IDaoConverter
?在这种情况下,AutoMapper是一个很好的选择,可以减少从模型转换到DAO或DAO的样板文件DTO@HuorSwords我的目标是坚持使用强类型参数,我只考虑将它们指定为DaoItem类型,但是采用DaoItem特定类型的数据库函数也需要丢失它们的强类型。@Peyman我们从未真正研究过AutoMapper,但我会尝试找时间。谢谢