我有一个 Java 应用程序来对 Product 对象执行 CRUD 操作。 该架构是:
ProductRepository -> database communication
ProductService -> business logic
ProductController -> API Routes
ProductDeserializer -> Create new Product from API object
ProductSerializer -> Create API object from Product
产品流程的创建如下:
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)的论据:
- 职责是共享的,反序列化器确保格式,服务添加业务逻辑和验证。
- 获得组装零件的汽车工厂是否会重建和改造所有零件?不,它只是验证它们并组装它们。
这个例子被简化了,但是如果我必须为Product开发复制功能,那么需要一些时间来编码和维护,并且似乎重复了在反序列化器中完成的工作。
最佳答案
如果您只是制作同一产品的另一个副本,我认为通过创建单独的副本然后保存该副本不会获得任何用途/优势。验证本身应该没问题,所以 #2 看起来不错。
我认为执行#1 的唯一原因是当您有不同的服务对象并且在保存之前以某种方式对其进行处理时(可能基于调用者是移动设备与桌面浏览器等)。在这种情况下,取消序列化的产品将与保存的产品不同,您可能需要进行复制。
关于java - CRUD架构设计-反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32590912/