上の赤いブロック (これは主観的な質問であり、クローズされる可能性があることを警告しています) のように、これに関する明確な法律は存在しない可能性がありますが、なぜそれが質問をクローズすることを正当化するのかわかりません。
...わきに暴言
永続化フレームワークとして Hibernate を実装することを計画しています。これにより、実装時に問題が解決する可能性がありますが、クラスとサブクラスに変換される DB テーブルがあります (実際の生活に存在する多くの詳細と複雑さは省略されています :) ):
//dbo.a with column Name
class a {
public String Name;
}
//dbo.b with column Name and a foreign key to dbo.a
class b extends a {
public String Name;
}
したがって、何をすべきか、そしてその理由は次のとおりです。
シャドーイング:コンパイル時にタイプが不明なオブジェクトを操作する場合
、これらをそのままにしておくことができます。
複合名:
すべてのフィールドの前にクラス名 ie a.aName
andb.bName
を付けて名前を付けることができますが、実際には非常に見苦しくなります: Door.DoorName
andRotatingDoor.RotatingDoorName
ゲッターとセッター:
JavaBeans ではこれらはフィールド名から派生するため、これについては言及しませんでした。Hibernate は注釈付きの POJO を使用していると思います。
結果に少し影響を与えるために、少なくともクラスが定義済みa
の抽象クラスを拡張し、適用可能な場合はそれ自体でシャドウする私の場合では、シャドウイングが最も堅牢であるようです。複合名を使用すると、すべての DB テーブルに列を追加したい場合、そのフィールドを各型に追加する必要があります (そして、継承のポイントは何ですか?!)Name
b
Name
NickName
最後に、できればこれらの手法の 1 つまたは複数の実装の賛否両論を経験したことがある人々が、この問題について何を言わなければならないかを調べることにしました。または、便利なストーンエッチングのベストプラクティスで十分です:)
-Nomad311