7

テクノロジー: - Java 1.5 または 1.6 - Hibernate 3.4

列名またはテーブル名の変更時に複数の場所で列名が更新されるのを避けるために、同じ定数ファイルが必要です。

次の質問がありますか?

  • 考えられる解決策の 1 つは、データベース内のすべてのテーブルの列名の定数を格納する 1 つのグローバル ファイルを維持することです。お気に入り

    class DbConstants
    {
            public static final String EMPLOYEE__PERFORMANCE_DESC="performance_desc";        
    } 
    

上記の場合、employees はテーブルの名前で、performance_desc は列名の名前です。そのため、2 つの異なるテーブルの 2 つの定数に列名がある場合に、それらの間の衝突を回避するために、定数の名前付けには tablename__columnname 形式が使用されます。

このアプローチの問題点の 1 つは、データベースが大きくなると、このファイル内の定数が数千に増え、管理が困難になることです。その他の問題は、テーブル名が変更された場合、すべてのテーブルのプレフィックス テーブル名を変更する必要があることです。

  • 上記の例の列の名前を performance_desc から achievements_desc に変更するとします。この場合、定数も EMPLOYEE__PERFORMANCE_DESC から EMPLOYEE__ACHIEVEMENT_DESC に変更したいと思うでしょう。この場合、列名と定数名の両方を変更する必要があったため、コードで列名の代わりに定数を直接使用することはあまり見られませんが、定数名を変更すると、屈折を使用して定数を反映できるという利点が 1 つあります。名前の変更。定数をあまり使用していないか、間違った方法で使用しているようです。

  • プロジェクトコードでは、テーブル列リストごとに1つのクラスを定義して、以下に示すように定数を定義しているようです。

    public class tbl_Employee
    {
            public static final PERFORMANCE_DESC=performance_desc;
    }    
    

これにより、テーブル名の変更がクラス名の変更のみにつながるなど、グローバル ファイルに関するいくつかの問題を解決できます。これに関する大きな問題の 1 つは、定数を定義するためだけにクラスを使用していることです。これは、適切なコーディング方法ではありません。

  • java 1.5または1.6で使用できるかどうか、および特定のシナリオで使用することをお勧めするかどうかは不明です。

  • 指定された db 定数を定義するためのベスト プラクティスは何ですか?

  • db 定数を使用することは本当に便利ですか?

  • 上記のようにテーブルごとに1つのクラスを使用する場合、直面する1つの問題は命名規則です。テーブルの列の定数を定義するテーブルの名前と対応するクラスの名前との関係は何ですか。

  • 上記のケースは、テーブル名ではなく列名のみのケースをカバーしています。コードでテーブル名ではなく定数を使用したい場合があるため、テーブル名の定数を定義するためのアプローチは何ですか。

  • 製品または関連バージョンがリリースされると、テーブル名と列名はあまり変わらないとよく言われます。テーブル名と列名の変更は、ほとんどの場合、開発段階または機能強化 (新しいバージョン) で発生します。テーブル名または列名に定数を使用しないことは強い議論ですか?

    どうすれば質問をより表現しやすくすることができるか、または質問が投票されないために何が欠けているかを提案してください。

4

5 に答える 5

7

コードをより保守しやすくしたいのですが、これは扱いにくくなり、コードを改善するどころか悪化させる可能性があることを認識してください。「Color.RED、Color.BLACK」のようなものを考えてください。

このような適度な量の定数を使用すると、コードが読みやすくなることがわかりました。データベースの列名がこのようなものに属しているとは思わない.

  • それらは頻繁に変更されることはないか、少なくとも変更されるべきではありません

  • 定数の大きなリストで終わるのに十分な数があります。その時点で、データベースでいまいましい名前を検索するよりも定数を見つけるのが難しいため、人々はそれらの使用をやめます。

カスタムクエリ、クエリの一部などを含む数千の定数を含むこのようなdbファイルを見てきました(public static final String COMMA=",";コンマのスペルが将来変更される可能性を処理するのが好きな宝石でさえ)。この時点で、それらは「一度使用する」文字列に発展し、誰もそれらを変更することを敢えてしません。

文字列定数に関するもう 1 つの注意点 - final は文字列としてクラスにコンパイルされます。そのため、定義を使用するクラスではなく定数クラスを再コンパイルすると、新しい定義が伝播されない可能性があります。

于 2010-12-17T18:40:00.463 に答える
2

Entity Mapping Framework (Hibernate など) の使用を検討しましたか?

すべてのデータベース テーブル情報 (および他のすべての DB 固有情報) を構成ファイルに格納できます。また、「ハード」DB 設計とアプリケーションの間の分離レイヤーも提供します (これにより、どちらかへの変更を吸収しやすくなります)。

于 2010-12-17T18:34:43.260 に答える
1

私の現在のプロジェクトでは、Hibernate のようなフレームワークを使用できないため、DB 関連のメタデータの多くにアノテーションを多用しています。実際の列定数については、はい、 試行済み および true を使用しますpublic static final String。そして、はい、それはかなり壊れやすいです。

于 2010-12-17T18:40:58.190 に答える
1

定数を定義するインターフェイスを作成できます。

Android の良い例を次に示します。インターフェイスを探しDataColumnsます。

于 2010-12-17T18:38:54.160 に答える
0

データベースに関するメタデータがある場合、これもデータベースに保存します。これは、最初ではないにしても、最終的には他のシステムが実行されるのを見た方法です。このデータが確実に維持されるようにするには、データベースのスキーマをチェックします。

于 2010-12-17T18:33:04.313 に答える