Repository模式

最近学习领域模型中提到了Repository模式,于是专门开一篇文章开讨论一下什么是Repository模式。

定义:

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

根据定义我们可以了解,他是介于数据层和领域层之间的。使用类似集合的接口来访问领域对象。

Repository是仓库管理员,领域层需要什么东西只需告诉仓库管理员,由仓库管理员把东西拿给它,并不需要知道东西实际放在哪。

通过封装数据查询和存储逻辑,可以隔离应用与ORM引擎,让应用不依赖于特定的数据库。同时也方便编写单元测试。

关于实现方式

仅使用泛型Repository接口并不太合适,因为Repository接口是提供给Domain层的操作契约,不同的entity对于Domain来说可能有不同的操作约束。因此Repository接口还是应该单独针对每个Eneity类来定义。

泛型的Repository类仍然用来减少重复代码,只是不能被UserRepository类直接继承,因为这样Delete方法将侵入User类,所以改为在UserRepository中组合一个Repository,将开放给domain可见且又能使用泛型重用的功能委托给这个Repository

参考资料:

1. Martin Fowler的《企业应用架构模式》

你可能感兴趣的:(Repository模式)