3

この質問の範囲を超える理由により、データベースを変更できないことを述べることから始めたいと思います。

そうは言っても、問題は、ほぼ同じプロパティを持つ 2 つのデータベース オブジェクト (T1、T2) があり、それらが同じ UI コードとビジネス ロジックを共有していることです。構成オプションに応じて、UI が T1 データまたは T2 データを表示することを意味します。データを管理するためのロジックもすべて同じです。

私が望んでいなかったのは、アプリケーション ロジック コードにinstanceof演算子が散らばり、基本的に 2 セットの同一コードを管理することでした。したがって、私の解決策は、T1 または T2 のいずれかをコンストラクターとして使用する一種のラッパー クラス (TCombo) を作成することでした。すべてのゲッターとセッターのデザインは似ています

public String getProp1() {
    if(o instanceof T1) ((T1)o).getProp1();
    else(o instanceof T2) ((T2)o).getProp1();
}

基本的にはセッターについても同様なので、値を設定するとDBオブジェクトが正しく設定されます。これを行うことで、1 セットのコードを使用して、コード全体でこの TCombo クラスを管理するだけで済み、これはうまく機能しました。問題は、効率がひどいことです。私のアプリケーションは大規模なデータセットを扱うため、データセット内のすべてのアイテムに対してこの TCombo クラスを作成する必要があるため、読み込み時間が非常に長くなります。

私の質問は次のとおりです。これらのクラスを管理する最良の方法は何ですか?2 セットのロジック コードを維持する必要がなく、速度も向上しますか?

4

2 に答える 2

6

これは多かれ少なかれ、インターフェイスが処理するように設計されているためT、共通のゲッターとセッターで のような名前のインターフェイスを設定し、両方T1を持ってT2実装します。両方に共通の then コードは、インターフェイスへの参照を渡し、 への呼び出しを使用せずに共通のメソッドを呼び出すことができますinstanceof。これにより、個々のインスタンスの getter および setter にカスタム コードを実装できる可能性があります (たとえば、 のメソッドではなくのsetメソッドで検証または何かを実行したい場合など)。T1T2

もう 1 つのオプションは、両方の DB オブジェクトが拡張する共通の基本クラスを持つことです。この基本オブジェクトには、それらの間のすべての共通フィールドが含まれます。次に、基本クラスへの参照を渡すだけです。これには、同じゲッターとセッターを同じ場所に実装する必要がないという追加の利点があります。

どちらの場合でも、およびにinstanceof固有のメソッドにアクセスするには、 および キャストを使用する必要がありますが、実行できる頻度ははるかに少なくなります。T1T2

于 2013-04-22T19:02:54.907 に答える