0

私はショールームを提示するアプリケーションを作成していますが、この時点で作成したクラスが多すぎます。

メイン ビューは、すべての一連の車を含む GridView です。(各 GridView アイテムは新しいクラスを開くため、非常によく似たコードを持つ 9 つのクラスがあります)

どうすれば構造化できますか?

4

2 に答える 2

2

@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 つの関数すべてが正しく機能します。

このアプローチはきちんとしていますが、それでも多くのクラスが得られます。あなたがやっていることに対して、いくつかのよく考えられた情報テーブル (シリーズとモデル コードによってアクセスされる) は、非表示のクラス内でより適切に機能する可能性があると思います。

コア クラスとして返される情報を使用してコードを構造化することは、別の、おそらくより良いアプローチかもしれません。

于 2013-03-01T21:50:09.587 に答える
1

私は実際にこれらすべてを書き留める時間はありません。クラスの統合を意味しますが、ここにヒントがあります。車のモデル (Z4、M6 など) を示すフラグを使用し、それをクラス内で使用して、コードを実行するツリーを決定します。ハードコーディングされた値を文字列リソースに置き換えます (それを行うだけで、他のコメントは必要ありません)。クラスをインスタンス化してその関数を使用するときは、フラグを考慮して、if()条件内またはswitch. 一部のモデルが他のモデルよりも多くのコードを必要とする場合は、モデルを担当するコードの一部にいつでもカプセル化できます。しかし、あまりにも多くの if を入れ子にするのは避けてください。他のものと 99% 同じことをする 100 個のクラスを定義するなど、面倒になるからです。コードを可能な限り再利用するよう常に心がけてください。書き込み(コピー/貼り付け)の繰り返し、アプリケーションのサイズ、必要なメモリなどを削減します。フラグを使用して、プログラムにそこで何をすべきかを知らせます。

于 2013-03-01T13:27:35.747 に答える