1

次の質問があります。

次の形式でトランザクション (ATM カード) 情報を送信するサードパーティ ソフトウェアがあるとします。

atm カード 4**5048 で 42 ドルが引き落とされました。残り$231。

それで、私は各取引で合計、残りの合計、カード番号を引き落としました。

だから私はクラスを作成します

class Transaction {
    private String mCardNo;
    private Double mAmount; // Actually. I dont store money as double, but let it be:)
    private Double mSumLeft;
}

ある日、2 番目のソフトウェアが表示され、情報を送信し始めます。

atm card 4**5048 debited 42$: Apple Storeで購入。残り$231。

そして、ユーザーが購入した場所に関する情報があるのは素晴らしいことだと思います。2 つのオプションがあります。Transaction クラスを拡張するか、新しい属性「place」を追加します。

ある日、新しいソフトウェアが追加され、3 種類のメッセージをサポートする必要が生じました。

atm card Visa Classic 4**5048 引き落とし 42$: Apple Store で購入。残り$231。

ああ、神様!そして、一意の数の属性を含む 100 種類以上のメッセージになると確信しています (現在、約 50 の属性があるためです!)

では、追加の属性を保存する最良の方法は何でしょうか?

4

3 に答える 3

1

属性の数に大きなばらつきがある場合は、(サブクラスの急増を避けるために)単一のクラスに一連の属性の値として格納し、キー(たとえば、など)Mapで識別する必要があります。StringMap<String, Double>Map<String, Integer>

于 2012-11-02T16:22:23.340 に答える
0

それは、データをどのように保存するか、データが正規化されているかどうか、違いがないかどうか、数百万のトランザクションまたは数百のトランザクションなど、他の多くの要因によって異なります。

ただし、提供したものだけで判断すると、トランザクションのバリエーションが数十ある場合は、タイプごとに個別のクラスを作成することはおそらく実用的ではありません。一般的なTransactionクラスがより良いアプローチです。しかし、アプローチの1つを選択することは、作業の半分にすぎません。残りの半分は、どちらを選択した場合でも、最初からクラスを適切に設計することを確認することです。これには、実際の設計を行う前に、現在行っている、または将来取得する可能性のあるトランザクションやさまざまなタイプを調査するために、ある程度の時間を費やす必要があります。問題(ビジネスドメイン)自体を包括的に把握した後、はるかに優れたソリューションを考案できるようになります。

于 2012-11-02T16:21:46.633 に答える
0

これでいくつかのルートに行くことができます。

  1. トランザクション クラスをそのまま保持し、それを基本クラスとして使用し、それを継承して、メッセージ タイプごとに新しいクラスを構築します。
  2. 必要なすべてのプロパティを 1 つのトランザクション クラスに追加します。使用時にすべてのプロパティを入力する必要はありません。

私は個人的に2番目のアプローチをより頻繁に使用しており、追跡が簡単です。

于 2012-11-02T16:01:24.823 に答える