存储库委托给外部对象存储

时间:2018-04-16 19:57:24

标签: domain-driven-design

我有一个REST端点来存储产品。 每个产品都有名称,价格和图像(例如PNG文件),因此我将产品信息(产品名称和价格)和图像文件发送到我的REST端点。 图像存储在外部对象存储(例如Amazon S3)中,因此我存储图像并获取我添加到产品实体的URL,然后将其保存到我的数据库中。

我的问题:是负责这两项任务的存储库(存储在外部对象存储中,将产品保存到数据库中)? 所以我会有类似的事情:

productRepository.save(productInfo, productImageInputstream) {

 String URL = externalObjectStorage.store(productImageInputstream);
 Product product = new Product(productInfo, URL)
 return productRepository.save(product);

}

这是一个好的设计吗?

由于

1 个答案:

答案 0 :(得分:0)

如果图片对您的业务很重要,那么将问题分开是不可避免的。尽管如此,我仍然强烈建议将这两个问题分开,并更多地考虑它们之间的实际界面。

如果将两个问题分离,你可以:

  • 在将来的某个时间点轻松替换带有CDN URL的S3网址
  • 如果您需要
  • ,请将图像压缩并缩放到不同的输出尺寸
  • 在应用程序的其他部分重用照片上传逻辑

如果您需要确保每件商品都有照片,请为其创建商业服务,然后使用您的CRUD存储库将数据/照片存储到各自的后端解决方案中:

interface ProductService {
    Product createProductWithImage(productData, imageData);
}