存储库应该有 update/save/delete 方法吗?

Should repositories have update/save/delete methods?

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

哪种方法最好?

谢谢。

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

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

所以如果我们同时有 addupdate 方法,我可以说它不是 collection-like 接口,对吧?添加到 set-like 集合时,我不需要费心检查对象是否已经存在。

关于add/update有两种常见的做法:

  • Collection-oriented 存储库尝试模仿 in-memory 集合,因此如果对象已更新且已在集合中,则您不需要 re-add .存储库(或隐藏在它下面的层,例如 ORM)应该处理对实体的更改并跟踪它们。首次创建对象时,您只需 add 一个对象,然后在更改实体后不再需要其他方法。

  • Persistence-oriented 存储库知道对象需要在任何更改后显式 “saved”,因此您可以调用 实体。save()创建或修改对象时的方法。

(这些是我对 Vaughn Vernon 在 Implementing Domain-Driven Design 中的定义的解释。)

delete 很好,但也许 remove 会更好。