我們使用Java EE 7和WildFly 9爲移動/ Web應用程序開發自定義後端。後端是一個經典的3層系統,具有通信邏輯(JAX-RS),業務邏輯(會話EJB)和持久層(Hibernate)。指定服務返回的字段的最佳方式
業務邏輯層由一組服務組成,每個服務由一個接口和一個EJB實現定義。讓我們假設
public interface IPostService {
List<PostDTO> getAllPosts();
}
和
@Stateless
public class PostService implements IPostService {
List<PostDTO> getAllPosts(){
// retrieving my Posts through Hibernate
}
有
public class PostDTO {
private Long id;
private String title;
// UserDTO is a VEEERY big object
private UserDTO author;
// getters and setters
}
讓我們假設,有時,客戶只關心後id
和title
。 API端點將接收帶有要獲取的字段列表的查詢參數。所以,JSON序列化的DTO應該只包含後id
和title
。目標是避免不必要的處理,以便在不需要時加載非常大的對象UserDTO
。
一個天真的解決方案是將一個自定義List<String> desiredFields
參數添加到getAllPosts()
。這並不完全說服我,因爲我們需要將此參數添加到幾乎每服務方法的。
這樣做的最佳做法是什麼? Java EE對象是否有此目的?
也許創建一個簡單的NameId值對象,讓Hibernate爲你構建VO實例列表?假設你使用JPA:http://stackoverflow.com/questions/2355728/jpql-create-new-object-in-select-statement-avoid-or-embrace – Gimby