2011-11-20 6 views
0

나는 다음과 같은 상황을 모델링 도움이 필요합니다. 그러나 일부 금융 상품 (특정 유형의 것)은 또한 가격에 (다른 것들 중에서) 의존하는 속성 인 "깨끗한"가격을 가지며,이 경우 가격은 "더러운"가격이라고도합니다. 가격 (또는 더러운 가격)과 깨끗한 가격을 계산하는 계산기 서비스가 있습니다. 그 상황을 어떻게 개념적으로 모델링하는 것이 가장 좋은가?금융 상품의 가격 (깨끗한가 또는 더러운)을 모델화하는 방법?</p> <p>금융 상품은 항상 가격이 :

  1. FinancialInstrument이있는 가격 가격이 개 파생 클래스와 슈퍼입니다

    FinancialInstrument 
        + price: Price 
    

    :

    가 나는 두 가지 대안을 고려했다 DirtyPrice 및 CleanPrice.

    CalculatorService 
        + compute_price(FinancialInstrument, ...): Price 
    
  2. FinancialInstrument 두 개의 유도와 슈퍼입니다 : CleanPrice은 계산기 서비스는 다음 FinancialInstrument의 가격을 계산하는 것입니다 DirtyPrice

    CleanPrice 
        + dirty: DirtyPrice 
    

    에 따라 PlainFinancialInstrument (단지 가격 속성에있다)과 CleanPriceFinancialInstrument 그 깨끗하고 더러운 가격을 가지고 있습니다.

         FinancialInstrument 
             + price: double 
    
    PlainFinancialInstrument     CleanPriceFinancialInstrument 
                  + clean_price: double 
    

    계산기 서비스는 CleanPriceSecurities에 대한 PlainSecurity 또는 깨끗하고 더러운 가격에 대한 가격을 계산하기 위해 두 가지 방법이있을 것입니다 :

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

두 대안의 장단점은 무엇입니까? 다른 대안이 있습니까?

감사합니다.

+0

기능이 개 가격이있는 금융 상품과 한을 가진 금융 상품의 차이점은 무엇입니까? –

답변

2

은 당신이 당신의 예를 또는 당신이 실제 상황에서 금융 상품 가격의 비즈니스 개념을 모델링하기 위해 노력하고 있는지 여부에 의해 지정된 추상적 인 문제를 모델링하는 방법을 요구하고 있는지 나에게 명확하지 않다. 당신이 아주 구체적이기 때문에 후자라고 생각합니다. 그래서 저는 그것에 대해 논평 할 것입니다. 이 경우 나는 두 가지 접근법 중 어느 것도 당신의 작업 요구를 충족시키기에 충분할 정도로 정교하다는 것을 의심하지 않습니다. 저는 그 지역에서 수년 동안 일해 왔습니다.

나는 당신이 작업중인 사업 영역 모르겠어요.이 지역에서 나는 깨끗하고 더러운 가격의 차이는 단순한 비즈니스 개념이다 (뱅킹)에서 작동하는 데 사용됩니다.예 : 상각 된 비용으로 평가 된 채권의 경우 청결한 가격은 발생액과 연기를 고려하지 않은 할인 된 현금 흐름의 값이고, 더러운 가격은 청결한 가격과 발생액/연기금의 합입니다. 저에게 알려진 모든 경우에있어서, 청결한 가격은 더러운 가격과 금융 상품의 일부 주요 인물 (간단히 FI)의 대부분의 시간 간단한 기능의 차이이며, 청결하고 더러운 가격은 관련성이있는 중요한 수치입니다 일부 금융 상품 (일부는 아니지만)을 대상으로합니다.

반면에 GAAP 및 사업 분야에 따라 청결하고 저렴한 가격을 제공해야하는지 또는 둘 다 제공해야하는지에 대한 질문은 은행 계좌/거래와 같이 금융 상품이 지정된 도서에 따라 달라질 수 있습니다 도서. 거래 책의 경우 보통 더러운 가격 만 검색하기를 원하며 깨끗한 가격은 은행 책과 관련이 있습니다.

FI를 예를 들어 재 할당하면 다른 키 구성 집합과의 관련성이 높아질 수 있습니다. 이러한 변화가 귀하의 상황과 관련이 있다면 귀하의 설계가 그러한 변경의 결과를 고려해야합니다.

개인적으로, 나는이 같은 설명 접근에 시작 했죠은 다음과 같습니다

  • 정의, FI 각 유형의 서브 클래스를 금융 상품

  • 추상 클래스/인터페이스를 만들

  • 귀하의 범위에서 귀하가 가질 수있는 가능한 모든 FI와 관련 될 수있는 모든 핵심 인물 목록을 작성하십시오 : 예를 들면, 깨끗한 가격과 더러운 가격, 그리고 아마도 그 차이를 나타내는 핵심 인물을위한 것입니다. 더미 가격 핵심 수치 항목을 추가로 생성하십시오.

  • 각 주요 수치에 대해 KF 관련 방법으로 주요 수치 인터페이스를 생성하십시오. 예 : 계산, 업데이트 - 이것은 전체 모델에 따라 다릅니다. 예를 들어 깨끗한 가격 인터페이스, 더러운 가격 인터페이스, 델타 인터페이스 및 가격 인터페이스. 갱신해야 할 순서를 정의해야 할 수도 있습니다. 가격 인터페이스의 메소드 세트는 FI 유형별로 깨끗하고 더러운 가격 인터페이스

  • 의 서브 세트 여야하며, 해당 FI 유형과 관련된 모든 주요 수치 인터페이스에 대한 특정 구현 (클래스)을 작성해야합니다. , 물론, 계정으로 재사용. 엄밀히 말하면 if/else 문이나 switch 문을 키 구현이나 FI 유형에 따라 전환하지 마십시오. 필요한 경우 추가 클래스 정의가 필요합니다. 이제 FI를 나타내는 클래스를 인스턴스화 할 때 팩토리 패턴을 사용하여 주요 도형 인터페이스의 인스턴스를 만듭니다. 즉, 계산에 사용할 FI 인스턴스 생성을 결정하면 FI 인스턴스는 FI의 주요 수치를 계산하는 방법을 알고 있습니다. 팩토리 패턴의 좋은 특징은 필요한 경우 런타임에 계산할 책과 다른 매개 변수를 추가로 고려할 수 있다는 것입니다. 공장은 가격 주요 지표 인터페이스가 문맥과 관련된 인스턴스를 가리킬 수있게합니다.

  • 가격 계산을 위해 가격을 계산하기 위해 가격 키 그림 인터페이스를 호출하지만 인터페이스가 가리키는 인스턴스는 FI 인스턴스에 의해 제공됩니다. 왜냐하면 공장에서 단순히 특정 문맥에서 특정 FI에 대한 정확성에 따라 클린 가격 인터페이스 또는 더러운 가격 인터페이스에 대한 가격 인터페이스를 제공합니다.당신이 사용하는 경우 FI는 삭제하지 않고, 재 할당되는 경우

, 제안의 FI 인스턴스 관련 주요 인물 및 주요 인물 계산 인터페이스 구현의 목록은 심지어 런타임/교환이를 업데이트 할 수 있습니다/FI 인스턴스를 다시 만듭니다.

희망 사항 본인은 실제보다 더 복잡한 질문을하지 않았기를 바랍니다.

감사합니다,

토마스

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; 
    } 
} 

당신은 로컬 private 변수를 필요로하지 않을 수 있습니다.

발신자는 단순히 어떤에 대해 그것이 입력 걱정할 필요없이 인스턴스 (FinancialInstrument 또는 CleanFinancialInstrument)에 getPrice()를 호출 할 수 있습니다.

hth.