2017-07-03 2 views
0

これはお粗末な質問ですが、POJOがJPQLクエリの結果を返すgetterを持っているのは大丈夫ですか? コンストラクタで代入を行う方がよいでしょうか?POJO getterはJPQLクエリ結果を返しますか?

public Long getCount() { 
Long count = 0L; 
    if (date != null) { 
     count = (Long) entityManager.createNamedQuery(query) 
       .setParameter(1, someCriteria.getId()) 
       .setParameter(2, someDate) 
       .getSingleResult(); 
    } else { 
     count = (Long) entityManager.createNamedQuery(query) 
       .setParameter(1, someCriteria.getId()) 
       .getSingleResult(); 
    } 
    return count; 
} 
+2

あなたのモデルのリポジトリ/サービスに依存することは一般的には貧弱な設計だと思います。 –

答えて

0

いいえ、私が個人的に言っているのは、ゲッターメソッドで実行される複雑な操作でさえも悪い習慣ではないと思います。これは、情報の隠蔽と複雑さの隠蔽と関係しています。呼び出し元は "getThat()"を呼び出し、操作の複雑さは呼び出し元に完全に隠されています。

異なる考慮事項は、パフォーマンスと効率です。ゲッタで実行される操作が高価な場合は、最適化ポリシーを検討する必要があります。状況によっては、ローカル変数、ローカルDBに結果を格納したり、ゲッターが呼び出されるたびに結果を再計算しないように他の種類のポリシーを適用することができます。すべて結果の意味、結果が変わるスピード、およびアプリケーションが最新の価値を得るための重要性に依存します。

+0

私はPOJOの正確な定義を明確に理解していません。しかし、私は単純なビジネスオブジェクトであるPOJO(コンテキストに応じて)と呼ばれるオブジェクトを期待しています。私はそのようなオブジェクトのゲッターがインスタンス変数(またはその派生)で利用可能な値を返すが、持続層への呼び出しを実行しないと期待します。私はこのコードをデータアクセスオブジェクトのファインダメソッドに入れて、驚くべき別の開発者(私がコードのにおいと考える)を避けます。 – sruetti

関連する問題