나는 C#으로 파고 들었지만 해결할 수없는 문제에 봉착했습니다.C#, 컨테이너 클래스 디자인 패턴?
금융 백 테스트 및 거래 엔진을 설계했으며 그 중 일부로 "전략 컨테이너"를 구현하고 싶습니다. 이 전략 컨테이너는 두 가지 목적을 수행해야합니다. (1) 수학 계산을 수행하는 다른 전략의 인스턴스를 보유하고, (2) 전략 인스턴스에 새로운 틱 데이터를 전달하고 전략 인스턴스에서 특정 정보를 다시 받기 위해 접근자를 제공합니다.
위에서 언급 한 다른 전략은 기본 클래스에서 파생 된 고유 한 클래스 여야합니다. 나는 그 전략들 내에서 완전히 다른 작업을 수행하기를 원한다. 따라서 그것들을 하나의 기본 클래스에서 파생 된 별도의 클래스로 설계하는 것이 실현 가능할 것이라고 생각했다. 한 가지 합병증은 Strategy Container에 포함 된 각 전략 클래스의 인스턴스가 여러 개 필요하다는 것입니다. 각 전략 클래스는 또한 주식 기호 목록을 보유하고 각 기호는 전략 인스턴스를 가져와야합니다.
전략 컨테이너의 또 다른 중요한 점은 각 전략 인스턴스를 만들고, 인스턴스화하고 나중에 호출 할 수 있다는 것입니다.
난 당신이 내가 설계 및 구현에 대해 갈 수있는 방법이 아이디어의 어떤 종류의 몇 가지를 물어보고 싶은게이 :- 무엇 전체 최고의 디자인 패턴을 것입니까?
- 각각의 전략에 대해 다른 클래스를 생성한다면 분명히 다른 유형으로 끝날 것입니다. 어떻게 전략 컨테이너 내의 모든 컨테이너/콜렉션을 보유 할 수 있습니까?
- 리플렉션이나 다른 방법을 통해 어떻게 끝낼 지 모른 채 각 단일 전략 인스턴스의 메서드를 만들고 인스턴스화하고 호출 할 수 있습니까? 나는 전략의 이름과 유형을 알고 주식 기호의 이름을 안다.
- 나는 전략에 이름 (클래스 이름 =?)을 제공하고 각 전략에 대해 주식 기호 목록을 제공하고자하는 전략을 제공하기 만하면됩니다. 전략 컨테이너는 목록이 제공되는 전략 유형의 각 전략에서 각 기호에 대한 인스턴스를 작성하고 이후에 계산을 수행 할 수 있도록 새 인용 부호를 각 인스턴스에 제공하는 "RunStrategy (Quote quote)"메소드를 호출합니다.
- 하나의 목표는 각 전략 클래스의 인터페이스를 최대한 깨끗하게 유지하는 것입니다. 대부분의 표준 (반복적 인) 기능은 파생 된 기본 클래스에서 구현됩니다.
전체 소스 코드는 요구하지 않지만 아이디어를 위해 어떻게이 제품을 설계해야하는지, 그리고 위의 각 사항을 어떻게 달성 할 수 있는지 생각해보십시오. 이것은 나 자신을 위해 무언가이고 어떤 상업적인 제품으로도 바꾸지 않을 것이다. 나는 수학적 비트와 조각을 구현하는 코드를 작성하는 것에 매우 익숙하지만 디자인 패턴과 시스템 아키텍처에 익숙하지 않다.
편집 : 그래이 머터 (Graymatter), 나는 약간 놀았고 내가 찾고있는 것을 정확하게 제공 한 것 같습니다. 고마워.
class Program
{
static void Main(string[] args)
{
List<IStrategy> container = new List<IStrategy>();
container.Add(new StrategyOne());
container[0].AddValue(50);
Console.ReadLine();
}
}
public interface IStrategy
{
void AddValue(int value);
}
public class StrategyOne : StrategyBase
{
public override void Calculates()
{
Console.WriteLine("This is my value: " + myValue);
}
}
public class StrategyBase : IStrategy
{
protected int myValue;
public void AddValue(int value)
{
Console.WriteLine("Run Strategy in Base");
myValue = value;
Calculates();
}
public virtual void Calculates()
{
}
}
저 아이디어를 가지고 조금 놀아 보겠습니다. 실험을 마치고 답해 드리겠습니다. 정말 감사드립니다. –
당신은 대답을 upvoting하여 자신의 의견을 평가 표시 할 수 있습니다. 나는 너를 대신했다. – Jason
나는 아직 투표를 할 수없는 것 같아요, 오늘 합류했습니다 ... 죄송합니다. –