Javaで記述され、HibernateにマップされたHRアプリケーションを開発します。特徴の1つは募集のフェーズです。私たちはコードがfiscalCode
クラスのプロパティを見て、特定の法律に非常に依存しているだけで、今まで市場向けに開発されているのでOOP - クラスにプロパティを追加するための最善のアプローチ
public class Candidate {
private String id;
private Integer candidateCode;
private GregorianCalendar birthDate;
private String italianFiscalCode; //unique code for italian people
}
:
Candidate
クラスは、次のようにモデル化されています。
私たちは、この概念を、例えば一意の識別子が異なる可能性があり、いくつかの文字列で構成されていても、全く存在しなくてもよい、他の市場にも拡大できるように一般化しています。私の心にポップ
まず最初:
1 - 単にcountryIdentifierとしてフィールドの名前を変更し、特定の国のために必要に応じて他のフィールドを追加します。
private String countryIdentifier; //general unique code
private Integer greekAddedCode;
これは、DBMS列の名前を変更(および最終的に他のものを追加する)、そのフィールドを使用するすべてのクエリを変更する、(古いitalianFiscalCodeが使用されますここですべての配置)に必要なコードをリファクタリングを意味します。
これは
2私には貧しい実装のように見える - サブクラスCandidate
はItalianCandidate
とGreekCandidate
を作成し、サブクラスで特定のフィールドを移動します。
問題は(私たちは(多対1とセット)すべての「重い」プロパティを移動するので重いクラスでHibernateマッピングを最適化するための唯一の機能を有しているCandidate
クラスがすでにHeavyCandidate
によってサブクラス化されていることですこれは私たちのすべての豆に従うアプローチです)。
この場合、最も正しいアプローチは何ですか?
を作るための良い方法です。いいえ、候補にはHeavyCandidate型のフィールドが必要です。これは_is__関係ではありません。あなたの現在のアプローチは、継承の重大な濫用であり、継承をこのように悪用してはならない理由の優れた例です。 –
あなたの返信ありがとうございます@BoristheSpider。私はこのアプローチがHibernateを介して簡単にBeanをマップできるようになったと思いますが、正しいものではないと私は同意します。 – frankieta