Open Vlad-Shcherbina opened 10 years ago
Это хорошая мысль, которую можно применить для задач типа 2011, 2012, 2014, :thumbsup:
Да, более того, ИМО нужно было и в других местах использовать game.lambda_man_ai_from_spec (и аналогичные функции для загрузки ghost_ai, maps, and, maybe, the game engine itself if we were ever to make a separate implementation) вместо прямых импортов.
Паттерн называется Inversion of Control и Dependency Injection если что, и я его дико одобряю ибо decoupling. Ну, в разумных пределах, конечно, когда это не приводит к callback hell. То есть типа когда это strictly necessary, game.py как бы всё-таки должна быть более или менее активным объектом и вызывать имплементации АИ и прочего.
Спеки меня в начале удивили (особенно в том месте, когда мы делали eval произвольного питоновского кода), но на самом деле они хороши. Особенно для менеджмента соревнований.
Кстати, а у этого паттерна есть общепринятое название?
Мне паттерн очень понравился. Получилась бесплатная интероперабельность между турнирами и реплеями, а также удобное и унифицированное стравливание стратегий вне зависимости от реализации.
Несмотря на полную симметрию между картами, гостами и пакманами, спеки для карт появились довольно поздно, когда Йоле прикрутил map_loader. Наверное, сказался тот факт что у нас не было отдельных классов Map и Game. Потом спеки карт тоже пригодились: можно было поворачивать карту параметром в спеке, что позволило увеличить нашу скудную коллекцию в четыре раза. Ещё можно было бы сделать спеку для генератора случайных карт.
Они потенциально вводят обратную зависимость прода от скратча, но поскольку она локализована и понятна, проблем я не вижу. Теоретически можно было бы полностью избавиться от неё через регистрацию спек парсеров.