【发布时间】:2015-04-09 06:56:31
【问题描述】:
我目前正在为我们的新应用程序开发数据访问层,它不是一个大型应用程序,所以我决定使用 Dao 模式,将每个模型项转换为一个 Dao 项,然后再将其存储到数据库中存储的查询。
尽可能多地使用通用接口和抽象类来删除重复操作,但现在我遇到了一些障碍。
我们有一个用于 Dao 转换类的接口,如下所示:
internal interface IDaoConverter<TModel, TDao>
where TModel : ModelItem
where TDao : DaoItem
{
ToDao(TModel inModel);
inDao);
}
到目前为止,这工作正常并且适合它的功能,您在类定义中指定模型类型和它将转换为(1-1 关系)的 Dao 类型,并创建函数以匹配这些类型。这些道转换器的实例被保存在工厂中,以便于检索。
接下来我想要创建将使用它的数据访问类,并且我想以通用方式设计它。
我追求的是一种向 Dao Converter Factory 询问我想要一个可以处理特定类型的 Model 项目的 Dao Converter 但到目前为止我找不到指定它的方法。
public abstract class AbstractDataAccess<T> where T: ModelItem
{
protected IDaoConverter<T,?> Converter;
public void Init(IDaoConverter<T,?> inConverter)
{
Converter = inConverter;
}
}
我基本上希望能够在课堂上用我想要的任何类型替换问号。由于这个原因,我目前不得不完全写出每个数据访问类。
【问题讨论】:
-
为什么不使用 AutoMapper?
-
您在界面上使用泛型,但是...如果您明确告诉
TDao是DaoItem类,为什么不使用 @987654326 之类的方法将其声明为internal interface IDaoConverter<TModel>@? -
AutoMapper 是这种情况下的绝佳选择,可以减少从 Model 转换为 DAO 或 DTO 的样板
-
@HuorSwords 我的目标是坚持强类型参数,我只是将它们指定为 DaoItem 类型,但是采用特定类型 DaoItem 的数据库函数也需要失去它们的强类型。
-
@Peyman 我们从来没有真正看过 AutoMapper,但我会试着找点时间。谢谢