私はショールームを提示するアプリケーションを作成していますが、この時点で作成したクラスが多すぎます。
メイン ビューは、すべての一連の車を含む GridView です。(各 GridView アイテムは新しいクラスを開くため、非常によく似たコードを持つ 9 つのクラスがあります)
どうすれば構造化できますか?
@g00dy にもう少し肉付けするには、クラスを作成することから始めます
class BMW {
// Reference codes for every series
public final static int SERIES_1 = 0;
public final static int SERIES_2 = 1;
// etc
public final static int NUMBER_SERIES = 9;
// All the code needed for every car
// eg.
public String giveManufacturuer() {
return "BMW"; // But see @g00dy - use string resources
}
public String giveSeries() {
return XXXXX; // Depends on which approach you choose, see below
}
public String giveModelName() {
return XXXXX; // Depends on which approach you choose, see below
}
}
すべてのバリエーションをこのクラスにロードできます (すべての車の参照コードを追加し、いくつかのテーブルをセットアップして索引付けを簡単にします)。
または、各クラスの継承を使用してクラスを拡張できます。
class Series1 extends BMW {
@Override
public String giveSeries {
return "Series 1";
}
}
class Series1M3Door extends Series1 {
@Override
public String giveModelName {
return "3 Door";
}
}
その後、最終的なクラスをインスタンス化すると、3 つの関数すべてが正しく機能します。
このアプローチはきちんとしていますが、それでも多くのクラスが得られます。あなたがやっていることに対して、いくつかのよく考えられた情報テーブル (シリーズとモデル コードによってアクセスされる) は、非表示のクラス内でより適切に機能する可能性があると思います。
コア クラスとして返される情報を使用してコードを構造化することは、別の、おそらくより良いアプローチかもしれません。
私は実際にこれらすべてを書き留める時間はありません。クラスの統合を意味しますが、ここにヒントがあります。車のモデル (Z4、M6 など) を示すフラグを使用し、それをクラス内で使用して、コードを実行するツリーを決定します。ハードコーディングされた値を文字列リソースに置き換えます (それを行うだけで、他のコメントは必要ありません)。クラスをインスタンス化してその関数を使用するときは、フラグを考慮して、if()
条件内またはswitch
. 一部のモデルが他のモデルよりも多くのコードを必要とする場合は、モデルを担当するコードの一部にいつでもカプセル化できます。しかし、あまりにも多くの if を入れ子にするのは避けてください。他のものと 99% 同じことをする 100 個のクラスを定義するなど、面倒になるからです。コードを可能な限り再利用するよう常に心がけてください。書き込み(コピー/貼り付け)の繰り返し、アプリケーションのサイズ、必要なメモリなどを削減します。フラグを使用して、プログラムにそこで何をすべきかを知らせます。