【发布时间】:2018-01-13 09:58:54
【问题描述】:
这是关于通用存储库模式中的映射模型。
我的解决方案中有三层
- WebAPI 层 - APIModel
- DAL 层 - DALModel
- EF - EF 模型
所有层都在实现泛型。
我很纠结如何传递模型并将其映射到其他层的模型。
public class BaseController<Model> : ApiController
{
// call to service
}
public class BaseServices<Model>
{
// call to dal repository
}
public class BaseRepository<Model>
{
// call to EF
}
问题/疑问
场景 1:
我可以将所有 3 个模型暴露给所有层。 IE。:
public class BaseController<APIModel, DALModel, EFModel>。但这有必要吗?我不希望在所有图层上公开所有模型。我也不希望将 EFModel 用作在任何地方都可以使用的单一模型。
场景 2:
我只能将相关模型传递给每一层,即:
public class BaseController<APIModel>
public class BaseService<APIModel, DALModel>
public class BaseRepository<DALModel, EFModel>
如果这是应该做的,我应该把映射代码放在哪里?这意味着我如何将BaseService<APIModel, DALModel> 映射到BaseRepository<DALModel, EFModel>。我可以提供一些示例代码吗?
我在互联网上查看了一些示例代码,但找不到我需要的。
我只能想到这两种情况,如果有人能提供更好的解决方案,我将非常感谢。
【问题讨论】:
-
但这有必要吗? 这都是意见问题。存储库层是必要的吗?
-
但是如果模型暴露在所有层上,那么拥有不同的模型又有什么意义呢!你也是在暗示场景 2 是不可能的还是不推荐的!!
-
这个站点上有很多编写良好的代码,它们遵循没有存储库的 ViewModel 模式(EF 是您知道的存储库)。您有未公开的实体模型和用于特定用例的视图模型和 AutoMapper 等工具,以减少摩擦。我们还没有遇到需要在此之上的另一层。当我们获得新的开发人员时,他们可以很快加入并理解代码。
标签: c# entity-framework generics asp.net-web-api repository-pattern