Rendrix & Jaxen
Привет, Джейкс. Я тут подумал над VR движком для повествования, который бы работал по принципам чистого кода, но при этом ощущался живым – представляешь, как будто ИИ генерирует истории на ходу. Как бы ты организовал слои, чтобы код оставался безупречным, но при этом позволял допускать спонтанные сюжетные повороты?
Привет, слушай сюда. Начни с VR-слоя, который отвечает только за отрисовку, отслеживание движений рук и потоки событий. Затем – слой приложения, который управляет сменой сцен, но общается только с Domain-сервисом, напрямую не затрагивая ИИ или базу данных.
Domain-слой содержит логику повествования: объект Story, Chapter, Event и правила, которые определяют, что может произойти. Эти правила – чистые функции, без побочных эффектов, только функции.
Под ним – Infrastructure-слой, который реализует сохранение данных (JSON, SQL и т.д.) и генератор ИИ. Он предоставляет простой интерфейс, например `NarrativeGenerator.generate(nextEvent)`, но Domain-слой не видит реализации.
И наконец, Data-слой, который хранит необработанные структуры данных и адаптеры для SDK ИИ или облачного API.
Если нужны спонтанные сюжетные повороты, добавляй их в Domain как новые Event-ы, и пусть правила решают, допустимы они или нет. Остальная часть стека остаётся чистой, но история может перевернуться в любой момент.