讓我們假設一個簡單的Spring MVC控制器,它接收一個域對象的ID。控制器應該調用一個服務,該服務應該對該域對象做些什麼。Spring MVC域對象處理最佳實踐
從哪裏可以將域對象的ID從數據庫中加載到域對象中?這不應該由控制器完成。所以服務方法接口必須使用接受域對象的ID而不是域對象本身。但是,如果將域對象作爲參數,服務的接口會更好。
對這個常見用例有什麼想法?你如何解決這個問題?
在我的一個項目讓我們假設一個簡單的Spring MVC控制器,它接收一個域對象的ID。控制器應該調用一個服務,該服務應該對該域對象做些什麼。Spring MVC域對象處理最佳實踐
從哪裏可以將域對象的ID從數據庫中加載到域對象中?這不應該由控制器完成。所以服務方法接口必須使用接受域對象的ID而不是域對象本身。但是,如果將域對象作爲參數,服務的接口會更好。
對這個常見用例有什麼想法?你如何解決這個問題?
在我的一個項目控制器應該將id傳遞給服務層,然後返回所需的任何內容來呈現剩餘的HTTP響應。
所以 -
Map<String,Object> doGet (@RequestParam("id") int id) {
return serviceLayer.getStuffByDomainObjectId(id);
}
別的只是將被污染的網絡層,這不應該關心的所有關於持久性。服務層的全部目的是獲取域對象並告訴他們執行其業務邏輯。因此,數據庫調用應該駐留在服務層本身 -
public Map<String,Object> getStuffByDomainObjectId(int id) {
DomainObject domainObject = dao.getDomainObjectById(id);
domainObject.businessLogicMethod();
return domainObject.map();
}
我使用的服務層:
class ProductService {
void removeById(long id);
}
我認爲這將取決於服務是否是遠程或本地。通常我會盡可能將ID傳遞給遠程服務,但首選本地對象。
其原因在於,它只通過發送絕對必要的遠程服務來減少網絡流量,並阻止對本地服務的多個DAO調用(儘管使用Hibernate緩存可能是本地服務的一個靜音點)。
尼克,這是「有爭議的問題」 :-) – anton1980 2012-07-21 05:04:44