存储库层的映射

本文关键字:映射 存储 | 更新日期: 2023-09-27 17:54:50

我在服务层内部映射了一些代码:

var authors = _repository.FindAll().Where(x => x.IsActive == 1).ToList();
authorViews = authors.ModelToViewModelCollection();

但是我的前辈建议我在仓库层内映射如下:

return (from c in Context.Books
                    .Where(x=>x.IsActive == 1)
                    select new BookDetailsView
                    {
                        ID = c.ID,
                        TitleB = c.TitleB,
                        TitleE = c.TitleE,
                    }).ToList();

存储库层的映射

主要区别在于,在第一种情况下,控制器(或服务)将直接操作EF来构建查询。无论您如何编写,这都不是存储库模式。

第二种方法将EF操作保留在存储库中,并直接返回视图模型,因此上层不知道您正在使用EF,也不需要构建查询。

存储库的目的是将其他层与持久性解耦,即其他层只知道存储库,只处理特定于它们的对象。通过这种方式,持久性可以优化对象的存储/检索方式,而不会影响其他层。这意味着你可以在持久化中使用EF, Nhibernate, mongo db等,根据什么对应用程序和业务层最好,或者UI永远不会知道它,当你在持久化中改变一些东西时也不需要改变。

如果你想知道切换db或更改持久化的时间,切换db很少,但更改持久化模型(表,列等)非常频繁,特别是在开发时。存储库帮助您仅在持久性中保存更改。