Java EE 7 と WildFly 9 を使用して、モバイル/Web アプリケーションのカスタム バックエンドを開発しています。バックエンドは、通信ロジック (JAX-RS)、ビジネス ロジック (セッション EJB)、および永続層 (Hibernate) を備えた従来の 3 層システムです。
ビジネス ロジック層は一連のサービスで構成され、それぞれがインターフェイスと 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
}
場合によっては、クライアントが postid
とのみに関心があるとしますtitle
。API エンドポイントは、取得するフィールドのリストを含むクエリ パラメータを受け取ります。したがって、JSON でシリアル化された DTO には、 postid
とtitle
. UserDTO
目標は、不要なときに非常に大きなオブジェクトをロードするために不要な処理を避けることです。
単純な解決策は、カスタムList<String> desiredFields
パラメータをに追加することgetAllPosts()
です。ほとんどすべてのサービス メソッドにこのパラメーターを追加する必要があるため、これは私にはあまり納得できません。
それを行うためのベストプラクティスは何ですか? この目的を意図したJava EEオブジェクトはありますか?