Кажется, написал что-то очевидное, но столкнулся с этим лично на своём pet project.
В рамках него я пишу интерпретатор TypeScript подобного языка.
Этот проект родился, как дипломная работа в бакалавриате бауманки.
Но поскольку сроки были сильно сжаты, то изначально всё сделано на скорую руку.
Год назад хотел добавить в язык аналог выражения
with из C#, но столкнулся с тем, что из-за спешки сделать это будет больно.Одно из самых неправильных решений в проекте - обработка абстрактного синтаксического дерева интрузивным методом.
Подсветить то, насколько важно перейти на паттерн Visitor, помогла моя попытка внедрить DDD и выделить домен системы.
Сейчас, когда рефакторинг близится к концу, все детали пазла собираются в одну картину, новые фичи собираются на глазах за счёт правильной траектории архитектурной эволюции.
При этом стали видны новые точки роста - ошибки в реализации «Посетителя», изоляция домена, изменение знания одних частей системы о других и так далее.