알아낼 수없는 디자인 문제가 있습니다. 다음은 내가 가지고있는 것입니다 :C#에서 인터페이스와 합성 및 상속을 결합 할 수 있습니까?
일반적으로 두 가지 일반적인 유형의 오브젝트 인 Strikes and Options가 있습니다. 이들은 두 개의 인터페이스 IStrike와 IOption으로 추상화되어있다.
IOption에 다음과 같은 필드가 있다고 가정 해 봅시다. 실제로는 약 10 배의 크기가 있지만, 문제를 설명하기 위해 다음 세 가지를 사용할 수 있습니다.
interface IOption
{
double Bid{get;set;}
double Ask{get;set;}
double ImpliedVol{get;set;}
}
interface IStrike
{
IOption Call{get;set;}
IOption Put{get;set;}
}
자, 즉, 잘 좋은,하지만의 내가 아닌 문제가 다시 르십시오 암시 권
public double SquareImpliedVol(IOption opt)
{
return Math.Pow(opt.ImpliedVol,2);
}
일부 "수학"을 수행하기위한 다음과 같은 방법을 가지고 말을 할 수 있지만, 테스트를 위해 모의 객체를 작성할 때 Bid 및 Ask을 구현해야하는지 명확하지 않습니다. 나는 모르지만, SquareImpliedVol 내부에 배짱이 있다는 것을 알지 못한다면, 나는 그것을 알지 못한다. 이는 코드에 대한 테스트를 작성하고 있다는 것을 의미한다.
그래서이 문제를 해결하려면, 난 그냥 ImpliedVol 속성을 포함하는 다른 인터페이스 IOptionImpliedVol를 만들 수 있습니다, 다음 르십시오 그렇게
interface IOption : IOptionImpliedVol
{
double Bid{get;set;}
double Ask{get;set;}
}
처럼 IOptionImpliedVol에서 상속이 그리고 우리는
public double SquareImpliedVol(IOptionImpliedVol opt)
{
return Math.Pow(opt.ImpliedVol,2);
}
SquareImpliedVol을 전환 할 수 있습니다
그리고 우리는 훌륭합니다. 나는 모의 물건을 쓸 수 있으며 모든 것이 멋지다. 예외 ... 목록에서 작동 할 메서드를 작성하려고하지만 IStrike에서 필요한 유일한 속성은 Call.ImpliedVol 및 Put.ImpliedVol입니다. 나는
interface IStrikeImpliedVol
{
IOptionImpliedVol Call;
IOptionImpliedVol Put;
}
같은 것을 만들려하고이 정당하지 않은 경우를 제외하고 다음 나는 또한
interface IStrike : IStrikeImpliedVol
{
IOption Call;
IOption Put;
}
있을 수 있습니다. 나는 이것을 해결할 수있는 일종의 디자인 패턴이 있어야만하는 것처럼 느껴지지만, 나는 일종의 구성과 상속의 웹에 갇혀있다.
처음 디자인이 올바른 아이디어. IOptionImpliedVol과 IStrikeImpliedVol 인터페이스를 사용하기를 원하지는 않습니다. 언제 끝날까요? 당신의 조셉 (Jonathan)은 이미 당신을 이끌어가는 경로를 설명하기 위해 매우 어리숙하고 복잡한 * 웹 *이라는 용어를 사용했습니다. 스노우 베어를 들어보세요. –
감사합니다. 때로는 디자인으로 약간의 재미를 느낄 수 있으며, StackOverflow와 같은 커뮤니티를 통해 내가 생각할 때 이야기 할 수 있다는 점이 좋습니다. –