2

フローのスケジュールを表す必要があるいくつかの金融アプリケーションをプログラムする必要があります。フローには次の 3 つのタイプがあります。

  • 料金の流れ(ある日の一括払いのみ)
  • 変動金利フロー (フローは、後日決定される金利に依存します)
  • 固定金利フロー (フローは取引完了時に決定される金利に依存します)

情報全体を保持する必要があり、これらのフローのスケジュールを表す必要があります。もともと私は継承を使用して3つのクラスを作成したいと思ってFeeFlowいました.FloatingFlowFixedFlowICashFlowGetFlowType()dynamic_cast

そうすれば、vector<IFlow>私のスケジュールを表すものを 1 つだけ持つことができます。

このデザインについてどう思いますか? 3 つの vectorvector<FeeFlow>を使用し、動的キャストを避ける必要がありますかvector<FloatingFlow>?vector<FixedFlow>

4

4 に答える 4

8

なぜ実際に動的キャストが必要なのですか? フローのサブクラスが同じインターフェースをポリモーフィックに実装するようにすると、何もキャストする必要がなくなります。

非常に異なる入力が必要な場合は、異なる入力をコンストラクターのパラメーターとして渡すことで、共通のインターフェイスをクリアすることができます。ただし、それらに共通のインターフェースを本当に定義できない場合は、独立したクラスとして実装する方がよいかもしれません。

于 2010-06-07T10:23:20.023 に答える
1

さまざまな種類のフローで行う必要があるすべての操作が、基になるデータのみが異なる場合は、そのような操作で ICashFlow を拡張することをお勧めします。動的キャストは必要ありません。ただし、これが不可能な場合は、両方のオプションで問題ないと思います。個人的には、基本クラスの 1 つのベクトルが他に隠された必要がない場合は、3 つのベクトルを持つものを選択します。

于 2010-06-07T10:26:56.257 に答える
0

さまざまなスケジュールとさまざまな種類の預金があり、それらが集合的に金融の流れを構成しているようですね。ソリューションは、戦略パターンがスケジュールと預金の両方の動作に有効であるかのように思えます。ただし、余裕がある場合は、機能的なアプローチを検討する価値があるかもしれません. ラムダ式は、コードの 10 分の 1 で同じロジックを提供します...

于 2010-06-07T13:00:07.263 に答える
0

戦略パターンはあなたに最も適していると思います。

処理を行う CashFlowStrategy プロパティを含む CashFlow クラスを実装します。

要件とフロー間の違いを完全には理解していませんが、次のようなものが機能する可能性があります (meta-c++、有効なコードではありません)。

class CashFlowStrategy {
  public:
    virtual void ProcessFlow(Account from, Account to);
}

class FixedRateCashFlowStrategy : public CashFlowStrategy {
  public:
    void ProcessFlow(Account from, Account to) { ... }
}

class CashFlow {
  private:
    CashFlowStrategy strategy;
  public:
    CashFlow(CashFlowStrategy &strategy) { this->strategy = strategy; }
    void Process() { this->strategy->ProcessFlow(this->from, this->to); }
}

必要なのは のみですstd::vector<CashFlow>。処理を行う方法の決定は戦略に隠されているため、気にする必要はありません。

于 2010-06-07T12:00:43.160 に答える