П. Толкачев
10Платформы и инфраструктураоктябрь 20247 минут

Архитектура и онтология

Почему деление системы на модули — это всегда выбор о том, как устроен мир.

Архитектура программной системы кажется чисто технической материей: где провести границы модулей, что от чего отделить, какие сущности завести. Но за каждым таким решением прячется утверждение о мире — о том, какие вещи отдельны друг от друга, а какие связаны. Архитектура — это прикладная онтология.

01Граница модуля — это утверждение

Когда вы решаете, что «пользователь» и «аккаунт» — две разные сущности или одна, вы не просто структурируете код. Вы утверждаете нечто о том, как устроена реальность, которую моделируете. Можно ли иметь несколько аккаунтов? Перестает ли пользователь существовать, когда удален аккаунт? Эти вопросы выглядят техническими, но они онтологические: о том, что считается отдельной вещью, а что — ее свойством.

Решая, где провести границу модуля, вы решаете, какие вещи в мире отдельны друг от друга.

02Модель становится реальностью

Самое важное происходит потом. Однажды зафиксированная в коде модель перестает быть одним из возможных описаний и становится реальностью, в которой живут пользователи. Если система не предусмотрела, что у человека может быть два гражданства, два имени, нелинейная биография, — этих возможностей просто не будет. Не потому что они невозможны в жизни, а потому что их нет в схеме. Архитектура тихо определяет, что вообще может произойти.

Категории базы данных становятся категориями опыта. То, что не влезло в модель, выпадает не только из системы, но и из доступного людям мира.

03Нет нейтральной декомпозиции

Инженеров учат, что хорошая декомпозиция «естественна»: правильные границы будто бы заложены в самой предметной области, надо лишь их разглядеть. Это полезная иллюзия, но иллюзия. Одну и ту же область можно разрезать многими способами, и каждый разрез что-то высвечивает, а что-то делает невидимым. Выбор границ — это выбор того, что важно, а значит, ценностное решение, замаскированное под техническое.

04Зачем инженеру эта оптика

Затем, чтобы проектировать честнее. Инженер, который видит в архитектуре только технику, считает свои решения нейтральными и потому не несет за них ответственности. Инженер, который понимает архитектуру как онтологию, спрашивает: чью реальность я кодирую? Какие случаи я делаю невозможными? Кто не помещается в мою схему — и что с ним будет?

Это и есть точка, где моя инженерия и мое исследование сходятся плотнее всего. Делить систему на модули — значит делать выбор о мире. Хорошо бы делать его с открытыми глазами.

К индексу текстов© Петр Толкачев · MMXXVI