repository - 存储库应该有更新/保存/删除方法吗?

标签 repository repository-pattern crud

我想为我的项目实现存储库设计模式,但不清楚是否在存储库中使用 CRUD 操作。一些资源说您不应该使用更新/保存/删除方法,因为存储库仅用于将对象保存在内存中,您应该为其他操作提供服务。

哪一个是最好的方法?

谢谢。

最佳答案

Martin Fowler’s definition的总结存储库模式:

Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.


因此,如果我们同时拥有 addupdate方法,我可以说它不是一个类似集合的接口(interface),对吧?在添加到类似集合的集合时,我不需要检查对象是否已经存在。
关于 add 有两种常见的方法。/update :
  • 面向集合的存储库尝试模仿内存中的集合,因此如果对象已更新且已在集合中,则无需重新添加对象。存储库(或隐藏在其下方的层,例如 ORM)应处理对实体的更改并跟踪它们。你只是add当你第一次创建一个对象时,实体改变后就不需要更多的方法了。
  • 面向持久性的存储库知道对象需要显式 “saved”更改后,您可以调用实体。 save() 创建或修改对象时的方法。

  • (这些是我对 Vaughn Vernon 在 Implementing Domain-Driven Design 中的定义的解释。)delete很好,但也许 remove会是一个更好的名字。

    关于repository - 存储库应该有更新/保存/删除方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48682683/

    相关文章:

    c# - PetaPoco + 工作单元 + 存储库模式

    git - 与 Visual Studio 存储库中的共享库

    spring - JpaRepository 删除子元素

    laravel - 关于在 Laravel 中为每个模型创建存储库

    c# - 应该在 Repository 或 Service 层编写复杂的查询?

    angularjs - 数据管理/CRUD 生成器 AngularJS

    design-patterns - 使用存储库模式处理集合的说明

    domain-driven-design - 除了 "real"对象之外,DDD 存储库还可以使用摘要对象吗

    angularjs - 在 AngularJS 中以 RESTful 方式设置路由的最佳实践

    php - 在 Lithium 中调用 MySQL 函数