Для справки, смотрите статью: https://gameprogrammingpatterns.com/bytecode.html#data -% 3E-код
Здравствуйте, я сейчас смотрю много повторений в моем игровом коде в C# ,
как, например:
public void SomeAction() {
DoSomething();
DoSomething();
DoAnotherThing();
}
Мне удалось преобразовать этот код в подход, основанный на данных, используя шаблон команды:
public List<Command> commands;
public void DoAction() {
foreach (cmd in commands) {
cmd.Execute();
}
}
Я понял, что данные управляемый подход красиво разработан, и это правильный подход для меня. Но потом я наткнулся на это:
private float[] data;
public IEnumerable<float> ExampleQuery() {
return data
.Select(x => x + 2)
.Where(x => x < 50)
.Select(x => x * 3)
.Select(x => x * 10)
.Select(x => x > 999 ? 999 : x);
}
как конвертировать в это:
private float[] data;
public List<Rules> rules;
public IEnumerable<float> Query() {
// should I foreach here?
}
Как видите, этот должен быть управляемым данными, так что если я хочу сделать больше правил для запроса данных, мне не нужно перекомпилировать, и я могу просто добавить больше правил в список.
Из ссылки:
Мы хотим, чтобы их было легко изменить, легко перезагрузить и физически отделить от остальной части исполняемого файла. Я не знаю о вас, но для меня это звучит очень похоже на данные . Если мы можем определить наше поведение в отдельных файлах данных, которые игровой движок загружает и каким-то образом «выполняет», мы можем достичь всех наших целей. Нам просто нужно выяснить, что означает «выполнить» для данных.
Мне не нужно полностью использовать шаблон байт-кода, я просто хочу, чтобы мои правила были данными иерархии, которые моделируются использование класса / объекта, такого как шаблон команды.
* Любая хорошая справочная статья также очень поможет.