【问题标题】:Repository Pattern - MVC storefront存储库模式 - MVC 店面
【发布时间】:2010-10-01 05:51:09
【问题描述】:

一直在查看 MVC 店面,发现 IQueryable 是从存储库类返回的。想知道您是否不使用 LINQ,返回该对象是否有意义?在 LINQ 的情况下,由于延迟执行,因此在服务层中添加过滤是有意义的,但如果您不使用 LINQ,则在许多情况下您会希望在 DB 中进行过滤。在这种情况下,我是否只需将执行过滤的方法添加到存储库?如果我这样做了,服务层真的有用吗?

【问题讨论】:

    标签: asp.net-mvc linq repository-pattern


    【解决方案1】:

    任何一种方式都可以提出论点,请参阅最近的博客帖子:Should my repository expose IQueryable?

    【讨论】:

    • 我在 MONO 上开始一个项目并使用 MySQL...所以不使用 LINQ...可能只是直接使用 ADO...改变什么?
    【解决方案2】:

    Rob Conery 放入 MVC Storefront 的 IQueryable 内容具有创新性,但在创建存储库时绝不是标准。通常,存储库负责将您的域映射到数据库和从数据库映射。返回 IQueryable 并不真正执行任何映射,而是依赖服务层来执行此操作。这有其优点和缺点,但只要说这不是唯一的方法就足够了。

    但是,您会注意到,由于所有重复的代码,您的服务最终会变得有点臭。例如,如果您只想获取数据库中所有用户的列表,则必须在存储库和服务层中定义该函数。然而,服务层的亮点在于一个操作需要多个进出数据库的事务。

    【讨论】:

    • 存储库不应该进行映射。存储库应该在域实体和数据映射器之间进行调解。可以在“蓝色圣经”books.google.com/… 中找到对存储库模式的良好描述
    【解决方案3】:

    我在将 IQueryable 暴露给服务层时遇到的问题是,如果您想在不破坏服务层代码的情况下将存储库层包装在 Web 服务后面,那么您就不能,如果不使用 ADO.NET Data Services 则不能,但那么所有您的存储库代码本质上将变得多余。

    虽然我认为它对于小型应用程序来说非常高效,但当您开始考虑扩展和分发时,它的弊大于利。

    【讨论】:

    • 你不应该把你的服务层包裹在 Web 服务后面吗?将 ORM 层部署到单独的层有什么意义?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2011-04-19
    • 2012-06-11
    相关资源
    最近更新 更多