我有一个Java应用程序来对Product对象进行CRUD操作。 架构是:
ProductRepository - >数据库通信
ProductService - >业务逻辑
ProductController - > API路线
ProductDeserializer - >从API对象
创建新产品ProductSerializer - >从Product
创建API对象
创建产品流程:
API - > ProductController - > ProductDeserializer - > ProductService - > ProductRepository
ProductService中的方法创建如下:
1)
public Product create(Product product) {
validateInput(product);
Product newProduct = new Product();
copy(product, newProduct);
loadBrand(newProduct);
return productRepository.save(newProduct);
}
问题是:做起来更简单,更好:
2)
public Product create(Product product) {
validateInput(product);
cleanupBrand(product);
loadBrand(product);
return productRepository.save(product);
}
1)的论点:
2)的论点:
这个例子是简化的,但如果我必须为产品开发复制功能,则需要一些时间来编码和维护,并且似乎重复在反序列化器中完成的工作。
答案 0 :(得分:1)
如果您只是制作另一份SAME产品,我不会看到您通过创建单独的副本然后保存该副本而获得的任何使用/优势。验证本身应该没问题,所以#2看起来不错。
我认为做#1的唯一原因是你有一个不同的服务对象,并且在获得保存之前会以某种方式处理(可能基于调用者是移动设备与桌面浏览器等)。在这种情况下,去除了deserailzed的产品将与获得保存的产品不同,你可能想要复制。