【发布时间】:2015-09-16 01:05:15
【问题描述】:
我有一个 Java 应用程序来对 Product 对象执行 CRUD 操作。 架构是:
ProductRepository -> 数据库通信
ProductService -> 业务逻辑
ProductController -> API 路由
ProductDeserializer -> 从 API 对象创建新产品
ProductSerializer -> 从 Product 创建 API 对象
产品流程的创建过程:
API -> ProductController -> ProductDeserializer -> ProductService -> ProductRepository
ProductService 中的 create 方法如下:
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) 的论据:
- 职责分担,Deserializer 确保格式,Service 添加业务逻辑和验证。
- 获得零件组装的汽车厂是否会重建和改造所有零件?不,它只是验证它们并组装它们。
这个例子被简化了,但是如果我必须为产品开发复制功能,它需要一些时间来编码和维护,并且似乎重复了在反序列化器中完成的工作。
【问题讨论】:
-
我不认为 1. 的论点是有效的。服务不负责创建产品,您的 API 的客户端已经这样做了,服务有责任验证和保存(通过存储库)产品。此外,反序列化器不应该受到太多关注,因为它只是用于方便地处理数据。
-
我想到了API客户端的责任,忘了说,谢谢@ÁkosRatku
标签: java serialization architecture