Читать книгу Архитектура это граница - Группа авторов - Страница 15
Часть II: Граница
Глава 4. Решение
ОглавлениеПроведение границы – первое архитектурное решение. Все остальные решения живут внутри него.
Граница не возникает сама. Её проводят. Это акт выбора: здесь будет линия, по одну сторону – система, по другую – среда. Этот выбор предшествует всем остальным. До него нет пространства для решений. После него – есть.
Проведение границы создаёт арену. Внутри этой арены принимаются другие решения: как устроить внутреннее, как организовать части, как связать компоненты. Но сама арена – результат первого решения. Её размер, её форма, её положение относительно среды – всё это определено границей. Арена не нейтральна. Она задаёт возможное и невозможное для всего, что будет происходить внутри.
Первое решение отличается от всех последующих. Оно не выбирает из существующих вариантов. Оно создаёт пространство, в котором варианты появятся. Это решение о том, что будет существовать как отдельное. До границы вариантов нет – есть только однородное. После границы появляется структура возможностей: это можно, это нельзя, это внутри, это снаружи.
4.1. Иерархия решений
Решения в системе не равны между собой. Одни определяют пространство для других. Одни можно изменить легко, другие – с трудом, третьи – практически невозможно. Эта неравность не случайна. Она следует из порядка принятия решений. Кто решает первым – задаёт правила для всех, кто решает после.
Граница – первое решение. Оно принимается до того, как существует система. Оно создаёт систему. Все последующие решения принимаются уже внутри созданного пространства. Они работают с тем, что дала граница: с внутренним, которое теперь существует, с внешним, которое теперь отделено. Они не могут выйти за пределы, заданные границей. Они могут только обживать территорию, которую она очертила.
Представим последовательность. Сначала решение о границе: что будет системой, что – средой. Затем решение о делении: как разбить внутреннее на части. Затем решение о связях: как части будут взаимодействовать. Затем решение о реализации: как устроена каждая часть внутри. Каждое следующее решение принимается в пространстве, созданном предыдущим. Каждое следующее ограничено тем, что уже решено.
Это иерархия. Не иерархия важности – все решения важны. Иерархия вложенности. Внешнее решение создаёт пространство для внутреннего. Внутреннее решение живёт в границах, заданных внешним. Изменить внутреннее – не затронуть внешнее. Изменить внешнее – перестроить всё внутреннее. Это асимметрия, и она фундаментальна. Она не зависит от того, как устроена система. Она следует из самой природы вложенности.
Можно изменить реализацию компонента, не меняя его интерфейс. Можно изменить интерфейс, не меняя границу системы. Но изменить границу системы – значит пересмотреть всё: деление, связи, реализацию. Потому что все они были приняты для другой границы.
Представим систему, которая работает. Внутри неё – компоненты, связи, реализации. Нужно изменить, как работает один компонент. Если изменение не затрагивает его интерфейс – его можно сделать. Никто снаружи не заметит. Теперь нужно изменить интерфейс компонента. Это сложнее – нужно изменить всех, кто его использует. Но это всё ещё локально. Теперь нужно изменить, как система делится на компоненты. Это ещё сложнее – нужно пересмотреть многие интерфейсы и реализации. Но граница системы остаётся прежней. А теперь нужно изменить границу. Что происходит? Меняется само определение системы. Всё, что было внутри, может оказаться снаружи. Всё, что было снаружи, может оказаться внутри. Все решения под вопросом.
Первое решение – самое свободное. В момент его принятия нет ограничений. Нет системы, которую нужно учитывать. Нет зависимостей, которые нужно соблюдать. Нет истории, которая связывает. Есть только выбор: где провести линию.
Эта свобода обманчива. Она создаёт иллюзию, что решение можно изменить так же легко, как принять. Раз нет ограничений при принятии – значит, нет и при изменении. Это ошибка. Свобода первого решения существует только в момент его принятия. После – она исчезает. Потому что сразу после первого решения начинают приниматься вторые, третьи, десятые. И все они опираются на первое.
Каждое следующее решение принимается в условиях, созданных предыдущими. Пространство сужается. Свобода уменьшается. Решение о реализации компонента принимается в границах, заданных интерфейсом. Решение об интерфейсе – в границах, заданных делением. Решение о делении – в границах, заданных границей системы. Чем глубже в иерархии, тем меньше свободы. Но и тем меньше ответственность за целое.
Это похоже на вложенные пространства. Внешнее пространство – самое большое, но оно определяет размер всех внутренних. Каждое внутреннее пространство меньше внешнего. Каждое зависит от внешнего. Каждое существует только внутри внешнего. Решения работают так же. Граница создаёт пространство. Деление создаёт пространства внутри. Интерфейсы создаёт пространства ещё глубже. На каждом уровне – своя свобода, но она всегда ограничена уровнем выше.
Это сужение – не недостаток. Это структура. Ограничения, наложенные внешними решениями, делают внутренние решения возможными. Без границы системы непонятно, что делить. Без деления непонятно, какие нужны интерфейсы. Без интерфейсов непонятно, как реализовывать. Свобода без структуры – это хаос. Ограничения создают форму, в которой можно работать.