2012-01-11 9 views
1

私はいくつかのコードを整理していますが、同じ振る舞いを多く実装しているエンティティを持つクラスがあります。その行動を継承する親に組み込むべきか、それとも別々のものにする理由があるのでしょうか?Java永続エンティティは共通の親を通常のオブジェクトとして持つべきですか?

(私はそれらの間でデータを渡す方法にアップキャストができれば、より簡単に行うことが考えエンティティと通常のクラス間のデータの一部の移転もあります)

また、データベース固有の追加について何をすべきか共有変数に?例えば

は、以下のコードでは、私はクラスMyBaseを作成する必要があり、MyBaseクラスprop1プラスそのゲッターとセッターを抽出し、次いでMyObjectMyObjectEntity両方がMyBaseを拡張する必要がありますか?

ノーマル:

public class MyObject { 
    private String prop1; 

    public MyObject() {} 

    public String getProp1() { 
     return prop1; 
    } 

    public void setProp1(String prop1) { 
     this.prop1 = prop1; 
    } 

    public void doSomethingNormal() { 
     //Do something normal 
    } 
} 

エンティティ:

@Entity 
public class MyObjectEntity 
{ 
    @Column(unique = true, nullable = false) 
    private String prop1; 

    public MyObjectEntity() {} 

    public String getProp1() { 
     return prop1; 
    } 

    public void setProp1(String prop1) { 
     this.prop1 = prop1; 
    } 
    public void doSomethingEntity() { 
     //Do something entity like 
    } 
} 
+1

完全に依存します。インターフェースがより適切であり、Commons 'BeanUtilsのようなプロパティーコピーのユーティリティー。情報を与えて言うのは難しい。エンティティベースクラスとして通常のクラスを使用すると、永続フレームワーク、how/ifリフレクションなどによって異なる一連の問題が発生する可能性があります。 –

+0

'getProp1'広告の' setProp1 'メソッドを呼び出すと、' MyObject'と 'MyObjectEntity'の両方が' MyBase'を拡張しますか? – wrschneider

+0

その他のオプション:クラスを単一のエンティティに結合することができます。 サブクラスを使用する代わりに、共通プロパティをデリゲートクラス(is-aの代わりにhas-a)に抽出し、そのデリゲートに '@ @ 'というアノテーションを付けることで、埋め込み可能。 – wrschneider

答えて

0

私はそれが私の古いシリアライズされたオブジェクトの問題を引き起こしたとして、これを行うことができないことになった、と同じくらい私はできる限り再ファクタリングのための定住クラス内。

関連する問題