2

Play 2 を使用して Java でアプリケーションを作成しています。アプリケーション プロセスに関連する他のクラスとそれぞれ異なる関係を持つさまざまなクラスの人々をモデル化していました。それぞれApplicationSignatoryCertificateHolder、および がありEnrolmentOfficerます。

一人の人がそれらのいずれかまたはすべてである可能性があるため、それらに関する情報を 3 回保存するのは冗長であることに気付きました。それで、いくつかのリファクタリングが整いました!

オブジェクト構成を介して、、、およびクラスをそれぞれ1Personつずつ格納する 1 つのクラスを作成することにしました。その後、表記法を使用してそれらのプロパティにアクセスできました。SignatoryCertificateHolderEnrolmentOfficerperson.signatory.

私が疑問に思っているのは、3 つの特殊なクラスが の外に存在しないPersonため、内部クラスを使用して目標を達成する方がよいでしょうか? 私は次のように意味します:

public class Person {

    public class Signatory {
        // Signatory fields go here
    }

    public class CertificateHolder {
        // CertificateHolder fields go here
    }

    public class EnrolmentOfficer {
        // EnrolmentOfficer fields go here
    }

    // More general Person code goes here
}

SignatoryCertificateHolder、およびごとに別個のエンティティをデータベースに格納する必要がなくなるように思われますが、 ebeanがこの設計をデータベース スキーマに適切に変換できるEnrolmentOfficerかどうかはわかりません。

どちらの方法が私の目的に適していますか?

編集:内部クラス メソッドは機能しません。ebean が関係を処理する方法と互換性がありません。モデレーターにこのトピックの削除を依頼します。

4

2 に答える 2

2

SignatoryCertificateHolder、およびEnrolmentOfficerIS-A Person のそれぞれと person のフィールドは、それから派生したすべてのクラスで共通であるため、継承を使用できます/使用する必要があります。クラスは次のようにする必要があります。

class Signatory extends Person{
...
}


class CertifiedHolder extends Person{
...
}


class EnlormentOfficer extends Person{
...
}

Hibernate/JPA を使用する場合は、エンティティに継承を適用​​し、結果としてデータベース テーブルに継承を適用​​できます。エンティティの継承をご覧ください。

コメントに関しては、クラスをサブクラスから派生させて、2 つの機能を「結合」することもできます。

于 2013-08-07T14:24:00.540 に答える