存储库应该有 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.
所以如果我们同时有 add
和 update
方法,我可以说它不是 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
会更好。
我想为我的项目实现存储库设计模式,但不清楚是否在存储库中使用 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.
所以如果我们同时有 add
和 update
方法,我可以说它不是 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
会更好。