8

読んだ後:
効果的な Java (項目 43 を参照) - Joshua Bloch
クリーン コード (Don't Return Null) - Uncle Bob
回避 != null ステートメント
Null オブジェクト パターン

コレクション以外のオブジェクトには存在しないエンティティを検索したときに、DAO が何を返すべきかという質問に対する答えを探していました。Collection オブジェクトは、空の配列または emptyList メソッドを使用することで本当に問題ありません。しかし、非コレクションでは難しいかもしれません。別の解決策は、null を返さず、代わりに Null オブジェクト パターンを使用することです。しかし、私は Null オブジェクト パターンと DAO を統合する考えがありません。特にモデル (dto) オブジェクトの戻り値の場合に、Null オブジェクト パターンと DAO パターンとの優れた統合を見ることに本当に興奮しています。

最良の設計パターン、シナリオ、および提案を歓迎します。

4

3 に答える 3

6

あなたがする必要があるのは空のオブジェクトを返すことだけです - あなたのDAOにあるような顧客エントリを言ってください

if (result == null) { return new EmptyUser(); }

ここで、EmptyUser は User を拡張し、getter 呼び出しに適切なエントリを返し、コードの残りの部分が空のオブジェクトであることを認識できるようにします (id = -1 など)

小さな例

public class User {
    private int id;
    private String name;
    private String gender;
    public String getName() {
       //Code here
    }
    public void setName() {
       //Code here
    }
}

public class EmptyUser extends User {

    public int getId() {
       return -1;
    }

    public String getName() {
       return String.Empty();
   }
}

public User getEntry() {
   User result = db.query("select from users where id = 1");
   if(result == null) {
       return new EmptyUser();
   }
   else {
       return result;
    }
}
于 2016-10-17T08:59:12.277 に答える
2

私の経験では、null を返す単一のエンティティを返す必要がある実際のシナリオでは、実際にはデータの不整合エラーまたはデータの不足のいずれかです。どちらの場合も、本当に良いことは、自分の をクレートして投げることDataNotFoudExceptionです。すぐに失敗します

私は mybatis を ORM として使用していますが、最近、リストを返し、dao で返されたデータの量を確認し、返された量が dao のメソッドの仮定と一致しない場合に例外をスローするように、理論的に単一結果のマッパー select を書き始めました。それはかなりうまくいきます。

于 2016-10-21T07:19:53.460 に答える