【问题标题】:repository pattern variations?存储库模式变化?
【发布时间】:2016-06-15 17:57:40
【问题描述】:

基于以下 url,存储库模式基本上是一层存储库对象,用于封装数据访问:

http://martinfowler.com/eaaCatalog/repository.html

例如,一个 UserRepository 对象会有一个像这样的 GetUsers() 方法

public User GetUsers()
{
   return context.Users;
}

这就是存储库模式的全部内容还是还有更多内容?这种模式有任何命名的变体吗?例如,我想我过去遇到过有人断言这种模式涉及实体的通用/动态 CRUD。例如,由于 CRUD 是一种基本且可重复的模式,存储库模式将为任何/所有实体动态提供 CRUD 功能。我猜是这样的:new Repository().Read()。存储库模式的这种变体有名称吗?

【问题讨论】:

    标签: design-patterns repository-pattern


    【解决方案1】:

    存储库模式只是关于与特定数据存储实现的解耦。 CRUD 绝对适合该保护伞,并且通常可以。

    最重要的是准确地决定哪些业务对象需要哪些操作。您不需要公开所有内容的所有 CRUD 操作。

    这是一篇很好的文章,其中包含标准存储库模式实现的示例代码。 YMMV。 http://www.codeproject.com/Articles/526874/Repository-pattern-done-right

    【讨论】:

    • 谢谢。你知道我在帖子中描述的另一种模式的名称吗?: var users = new Repository().ReadAll() 我确信它可以用一个或多个设计模式来描述,尽管存储库模式可能不是描述它的最佳方式。回顾一下,这个实现是基于这样一个事实,即所有实体都将共享通用/可重复 CRUD 方法的某个子集。
    • ReadAll() 或 GetAll() 仍然适用于存储库模式。您甚至可以拟合具有 GetWhere(Predicate) 或类似查询参数的方法。
    • 关于我的最后一条评论,我将其称为“动态存储库”模式,除非其他人可以识别出与此实现相关的更正式的设计模式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多