我有一個Java應用程序對Product對象執行CRUD操作。 的架構是:CRUD體系結構設計 - 反序列化
ProductRepository - >數據庫通信
ProductService - >業務邏輯
ProductController的 - > API路線
ProductDeserializer - >從API對象來創建新的產品
ProductSerializer - >從產品創建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):
- 責任是共享的,反序列化器確保格式,服務添加業務邏輯和驗證。
- 難道一個汽車工廠,被賦予零件組裝重建和remolds所有零件?不,它只是驗證它們並組裝它們。
這個例子被簡化了,但是如果我必須開發產品的複製功能,它需要一些時間來編碼和維護,並且似乎重複了在解串器中完成的工作。
我不認爲1的論點是有效的。該服務不負責創建該產品,您的API的客戶端已經這樣做,該服務有責任驗證並保存(通過存儲庫)該產品。另外,反序列化器不應該太過關注,因爲它只是用來方便地處理數據。 –
我想到了API客戶端的責任,忘了提及它,謝謝@ÁkosRatku –