我正在架构中,它将为Web客户端和移动应用程序提供rest api。我正在使用Spring(spring mvc,spring data jpa,... etc)。域模型使用JPA规范编码。
我正在尝试应用干净架构的一些概念(https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html)。并非全部,因为我将保留jpa域模型。
通过各层的实际流量是这样的:
前端 <-> API服务 -> 服务 -> 存储库 -> 数据库
- 前端:Web客户端,移动应用
- API服务:Rest控制器,在这里我使用转换器和dto并调用服务
- 服务:与实现的接口,并且包含业务逻辑
- 存储库:具有自动实现的存储库接口(由spring data jpa完成),它包含CRUD操作以及一些sql查询
我的疑问:我应该在服务和存储库之间使用额外的一层吗?
我正在计划这个新流程:
前端 <-> API服务 -> 服务 -> 持久性 -> 存储库 -> 数据库
为什么要使用这个持久层?正如它在干净的体系结构文章中所说的,我希望有一个访问不可知的持久层的服务实现(业务逻辑或用例)。如果我决定使用其他“数据访问”模式,例如,如果我决定停止使用存储库,则不需要更改。
class ProductServiceImpl implements ProductService {
ProductRepository productRepository;
void save(Product product) {
// do business logic
productRepository.save(product)
}
}
所以我想使用这样的持久层:
class ProductServiceImpl implements ProductService {
ProductPersistence productPersistence;
void save(Product product) {
// do business logic
productPersistence.save(product)
}
}
持久层的实现是这样的:
class ProductPersistenceImpl implements ProductPersistence {
ProductRepository productRepository;
void save(Product product) {
productRepository.save(product)
}
}
因此,我只需要更改持久层的实现,就无需更改服务。再加上存储库与框架相关的事实。
你怎么看?谢谢。