0

次の状況をモデル化するのに助けが必要です。

金融商品には必ず価格があります。ただし、一部の金融商品 (むしろ特定の種類の) には、価格に (とりわけ) 依存する属性である「クリーン」価格と呼ばれるものもあります。この場合、価格は「ダーティ」価格とも呼ばれます。価格 (またはダーティ プライス) とクリーン プライスの両方を計算する計算サービスがあります。その状況を概念的にモデル化するにはどうすればよいでしょうか?

私は2つの選択肢を検討しました:

  1. FinancialInstrument には価格があります

    FinancialInstrument
      + price: Price
    

    Price は、DirtyPrice と CleanPrice の 2 つの派生クラスを持つスーパータイプです。CleanPrice は DirtyPrice に依存します

    CleanPrice
      + dirty: DirtyPrice
    

    次に、Calculator サービスは FinancialInstrument の価格を計算します。

    CalculatorService
      + compute_price(FinancialInstrument, ...): Price
    
  2. FinancialInstrument は、次の 2 つの派生を持つスーパータイプです。PlainFinancialInstrument (価格属性のみを持つ) と、クリーン価格とダーティ価格の両方を持つ CleanPriceFinancialInstrument です。

                           FinancialInstrument
                             + price: double
    
    PlainFinancialInstrument                   CleanPriceFinancialInstrument
                                                 + clean_price: double
    

    次に、Calculator サービスには、PlainSecurity の価格または CleanPriceSecurities のクリーン価格とダーティ価格を計算する 2 つのメソッドがあります。

    CalculatorService
       + compute_price(PlainFinancialInstrument, ...): double
       + compute_price(CleanPriceFinancialInstrument, ...): pair<double, double>
    

両方の選択肢のトレードオフは何ですか? 他の選択肢はありますか?

ありがとう。

4

2 に答える 2

2

あなたの例で指定された抽象的な問題をモデル化する方法を尋ねているのか、それとも現実世界のコンテキストで金融商品の価格設定のビジネス概念をモデル化しようとしているのか、私には明らかではありません. あなたは非常に具体的であるため、後者だと思いますので、それについてコメントします。ただし、この場合、あなたの 2 つのアプローチのいずれかが、タスクのニーズを満たすのに十分洗練されているとは思えません。私はその分野で数年間働いてきました。

あなたがどのビジネス分野で働いているかはわかりません。私が以前働いていた分野(銀行業)では、クリーンな価格とダーティな価格の違いは単純なビジネス コンセプトです。たとえば、償却原価で評価される債券の場合、クリーン プライスは発生と繰延を考慮しない割引キャッシュ フローの値であり、ダーティ プライスはクリーン プライスと発生/繰延の合計です。私が知っているすべての場合において、クリーン プライスは、ダーティ プライスと、多くの場合、金融商品のいくつかの主要な数値 (略して FI) の単純な関数との差であり、クリーン プライスとダーティ プライスはどちらも、関連する主要な数値に過ぎません。一部の(すべてではない)種類の金融商品。

一方、GAAP と事業分野によっては、クリーンな価格またはダーティな価格、あるいはその両方を提供する必要があるかどうかという問題は、金融商品が割り当てられている帳簿 (例: 銀行帳簿/トレーディング帳簿) にも依存する場合があります。通常、ダーティな価格のみを取得したいトレーディング ブックの場合、クリーンな価格は銀行勘定に関連しています。

さらに悪いことに、FI が再割り当てされるなどして、別のキー数値セットが関連するようになる場合があります。これがコンテキストに関連する場合は、そのような変更の結果を考慮して設計する必要があります。

個人的には、次のようなアプローチから始めます。

  • 金融商品の抽象クラス/インターフェースを作成する

  • FI のタイプごとに、サブクラスを定義する

  • 範囲内にある可能性のあるFIに関連する可能性のあるすべてのキー数値のリストを作成します-あなたの例では、クリーン価格とダーティ価格、そしておそらく違いを表すキー数値の1つです。さらに、ダミーの価格キー数値エントリを作成します。

  • これらのキー数値ごとに、KF に関連するメソッドを使用してキー数値インターフェイスを作成します。たとえば、計算、更新 - これはモデル全体に​​依存します。もう一度例を示します。クリーンな価格インターフェース、ダーティな価格インターフェース、デルタ インターフェース、および価格インターフェースです。それらを更新する順序を定義することが必要になる場合があります。価格インターフェースのメソッドのセットは、クリーンな価格インターフェースとダーティな価格インターフェースのサブセットでなければなりません

  • FI のタイプごとに、その FI タイプに関連するすべてのキー数値インタフェースに対して特定の実装 (クラス) を作成します。もちろん、再利用を考慮します。これらの実装のキー数値または FI タイプに応じて、if/else または switch ステートメントを厳密に避けてください。これが必要であることが判明した場合は、追加のクラス定義が必要です。FI を表すクラスをインスタンス化するときは、ファクトリ パターンを使用してキー数値インターフェイスのインスタンスを作成します。つまり、計算に使用するメソッドを FI インスタンス登録時に決定すると、FI インスタンスは FI のキー数値の計算方法を認識します。ファクトリ パターンの優れた機能は、必要に応じて実行時であっても、計算対象のブックやその他のパラメーターをさらに考慮できることです。

  • 計算機サービスと呼んだものは、価格を計算するために、price key figue インターフェイスのメソッドを呼び出しますが、インターフェイスが指すインスタンスは FI インスタンスによって提供されます。これは、ファクトリが価格インターフェイスをクリーンなその特定のコンテキストでその特定の FI に何が正しいかに応じて、価格インターフェースまたはダーティ価格インターフェース。

提案されているように、FI インスタンスで関連するキー数値とキー数値計算インターフェイス実装のリストを使用すると、FI インスタンスを削除/再作成することなく、FI が再割り当てされた場合に実行時にこれを更新/交換することもできます。

あなたの質問を実際よりも複雑にしていないことを願っています。

よろしく、

トーマス

于 2011-11-20T18:44:58.680 に答える
0

別の電卓サービスが必要ですか? そうでない場合はどうですか:

class FinancialInstrument {
    private price: Double;

    public getPrice {
       // calculate the price
       // presumably sets the private price?  Dunno
       this.price= // etc. .....
       return this.price;
    } 

class CleanFinancialInstrument extends FinancialInstrument {
    private cleanPrice: Double;

    public getPrice {
       //override FinancialInstrument.getPrice() as required
    }

    public getDirtyPrice {
       //do you need this? Dunno
       return this.getPrice();
    }

    public getCleanPrice {
       this.cleanPrice = //... etc.
       return this.dirtyPrice;
    }
}

価格をキャッシュしていない場合は、ローカルのプライベート変数さえ必要ないかもしれません。

呼び出し元は、インスタンス (FinancialInstrument または CleanFinancialInstrument) の型を気にすることなく、単純に getPrice() を呼び出すことができます。

h番目。

于 2011-11-20T18:20:27.510 に答える