Я углубился в C #, но столкнулся с проблемой, которую, похоже, не могу решить:
Я разработал финансовый бэк-тест и движок для трейдинга, и в рамках этого мне нравится реализовывать «Контейнер стратегии». Этот контейнер стратегии должен служить двум целям. (1) содержат экземпляры различных стратегий, которые выполняют математические вычисления, и (2) предоставляют средства доступа для передачи новых тиковых данных в экземпляры стратегии и получения определенной информации обратно из экземпляров стратегии.
Различные стратегии, которые я упоминал выше, должны быть уникальными классами, которые, однако, являются производными от базового класса. Я хочу выполнять совершенно разные операции в рамках этих стратегий, поэтому я подумал, что их реализация в виде отдельных классов, производных от одного базового класса, будет возможной. Одна сложность заключается в том, что мне нужно несколько экземпляров каждого класса стратегии, который содержится в контейнере стратегий. Каждый класс стратегии также содержит список биржевых символов, и каждый символ должен иметь свой экземпляр стратегии.
Другим важным моментом контейнера Strategy является то, что он может создавать, создавать экземпляры, а затем также вызывать каждый экземпляр стратегии.
Я хотел бы спросить некоторых из вас, какие у вас есть идеи, как я мог бы разработать и реализовать это:
- Каким будет лучший шаблон дизайна?
- как описано, если я создам разные классы для каждой стратегии, тогда я, очевидно, также получу разные типы, как я могу хранить все эти элементы в одном контейнере / коллекции в контейнере стратегии?
- Как я могу либо с помощью рефлексии, либо с помощью других средств создавать, создавать и вызывать методы каждого отдельного экземпляра стратегии, не зная, сколько у меня будет в итоге. Я знаю названия и типы стратегий, и я знаю названия биржевых символов.
- Я просто хочу указать, какие стратегии я хочу подключить (я даю названия стратегий = имена классов?) И для каждой стратегии список биржевых символов. Контейнер стратегий будет создавать экземпляры для каждого символа в каждой стратегии типа стратегии, для которого был предоставлен список, и впоследствии будет вызывать метод «RunStrategy (Quote quote)», который подает новые цитаты в каждый экземпляр, чтобы можно было выполнять вычисления.
- Одна из целей состояла бы в том, чтобы поддерживать интерфейс каждого класса стратегии как можно более чистым, при этом большая часть стандартной (повторяющейся) функциональности реализована в базовом классе производного от.
Я прошу не полный исходный код, а идеи, что вы думаете о том, как я должен разработать эту вещь и как я мог бы выполнить каждый из вышеперечисленных пунктов. Это что-то для меня и не превратится в какой-либо коммерческий продукт. Мне очень удобно писать код, который реализует математические фрагменты, но я менее знаком с шаблонами проектирования и архитектурой системы.
Edit:
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()
{
}
}