3

仮説として、私が というドメインオブジェクトを持っているとしましょうPerson。次のようになります。

public class Member {

    private final String firstName;
    private final String lastName;
    private final String email;
    private final String password;

    public Member(String firstName, String lastName, String email, String password) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getEmail() {
        return email;
    }

    public String getPassword() {
        return password;
    }
}

また、基本的な CRUD とその他の甘いメソッドを定義する MemberRepository インターフェースもあります。

ここで、Morphia を使用して、このドメイン オブジェクトを MongoDB インスタンスに保持するとします。MorphiaMemberRepository の実装を作成しましたが、ドメイン オブジェクトをできるだけ混乱させずに格納する方法がわかりません。

Morphia のユーザーなら誰でも、型の ID フィールドを作成してObjectIdで注釈を付ける必要があることを知っているでしょう@Id。さらに、クラスに@Entity("members"). 素敵なドメイン オブジェクトを Morphia/MongoDB 固有の注釈で混乱させたくはありません。

では...スタッカーの皆さん、この実装をできるだけクリーンに保つにはどうすればよいでしょうか?

4

2 に答える 2

1

これが Morphia の要件です (少なくとも @Id のもの)。アノテーションは、オブジェクトやシリアライゼーションの使用方法を変更する必要はありません。それらは、ほとんどのプログラムが無視する余分なメタデータです。それらは無害です。

一意のフィールドがある場合は、新しいフィールドを追加する必要はありません。@Id でマークを付ければ完了です。

本当にこれをしたくない場合は、手動で morphia でメタデータを作成してクラスを処理することができますが、そのプロセスは外部構成形式を介して公開されないため、はるかに多くの作業が必要になります。

于 2011-03-28T21:18:35.790 に答える
0

IMember so があるとしMember implements IMemberます。getter メソッドは IMember で定義されています。

別のクラスMorphiaMember implements IMemberには必要に応じて注釈が付けられ、ID フィールドがあります (id は必ずしも ObjectId ではありません)。各クラスにはファクトリーメソッドがあります

public static Member from(IMember mi) { ... }

したがって、典型的なワークフローは次のようになります。

MemberRepository repo = ...
Member m = Member.from(repo.get(some_id))
...
Member m2 = ...
repo.save(MorphiaMember.from(m))
于 2011-03-30T10:21:42.320 に答える