New We are sorting MAX channels into categories and territories. Read the news
Public channel ID 76936775713522

Архитектоника в ИТ

Канал Александра Межова с заметками про ИТ-архитектуру и разработку.

TG https://t.me/arch_and_dev

Сайт - https://amezhov.ru/blog/

Channels in category
2 102
This channel's rank
№ 1 229
Open category →
Russia
Open in MAX

Posts for the period

By reactions

Search and the whole feed — after free registration. Custom dates — with a subscription; the channel owner sees them for free. Sorting by reactions — with a subscription. Sign up

Loading…

Цена архитектурных решений

Многие задаются вопросом, какие решения являются архитектурно значимыми. Но как оценивать их критичность, зачем учитывать обратимость и почему всё это особенно важно сейчас?

М. Нейгард говорит, что значимые решения влияют на структуру, нефункциональные свойства, зависимости, интерфейсы (API), технологии разработки. Однако М. Ричардс и Н. Форд уточняют: решения являются архитектурными тогда, когда нацелены на поддержание важных архитектурных свойств (например, масштабируемости). Без привязки к этому выбор любой технологии – это не архитектурное решение, тем более значимое.

Знакомство с разными кодовыми базами заставило меня посмотреть на это с ещё одной стороны. При изучении системы часто полезно двигаться от понимания предметной области к технической реализации и организации её сопровождения. Это позволяет выделить три взаимосвязанных измерения – уровня:

1️⃣ Предметное. Что и зачем система должна делать? Инварианты, процессы, бизнес-правила.

2️⃣ Техническое. Как система реализует необходимое поведение? Архитектура, интеграции, данные, код.

3️⃣ Организационное. Кто и как обеспечивает её развитие и работу? Владение, процессы, эксплуатация.

А теперь самое важное:

Ошибки, допущенные на верхних уровнях, часто мультиплицируются на последующих, образуя лавинообразный эффект.

Ошиблись при моделировании, неправильно определив статусную модель и отношения между агрегатами и сущностями – обрекли на страдания всех: реализацию, код, службу поддержки и пользователей. Технически корректная реализация воспроизводит ошибочную бизнес-модель.

Однажды выбрали хореографию, потому что так было проще в начале реализации проекта, но при усложнении бизнес-процессов вовремя не перешли на оркестрацию – получили запутанный код, ломающийся при каждом изменении, и бесконечную нагрузку на операционную команду, обречённую на решение проблем с согласованием данных из-за некорректного завершения бизнес-процессов.

Разумеется, последствия распространяются не только сверху вниз. Неверное техническое решение может оказать куда большее влияние, чем небольшое изменение модели. Например, выбор способа хранения, транзакционных границ, стратегии отказоустойчивости.

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

Значимость архитектурного решения определяется не только тем, что оно затрагивает, но и масштабом возможных последствий, стоимостью изменения и обратимостью. Уровень решения помогает оценить потенциальную область распространения его последствий, но не определяет значимость автоматически.

Такой подход полезен и при оценке критичности технического долга, например во время приёмки существующего проекта.

При этом обратимость нужно рассматривать как критерий критичности решения. Одновременно необратимость – это не что-то плохое, но иной уровень ответственности и контроля. Некоторые изменения можно безопасно откатить, другие дорого, третьи невозможно. Поэтому наряду с критериями пересмотра в ADR полезно фиксировать возможность и стоимость обратимости.

Возвращаясь к началу: почему это важно сейчас? Многие задачи адресуются ИИ, команды начинают перестраивать разработку через SDD-подобные решения. При делегировании ИИ важен не столько технический уровень задачи, сколько масштаб последствий решений, которые ИИ получает право принимать самостоятельно. Следовательно, нужны более чёткие критерии того, что можно делегировать ИИ, а за что и как придётся держать ответ самому.

А теперь подумайте и спросите себя, какого уровня решения за вас недавно принимал ИИ? Определены ли границы этих решений и как они контролируются. 😏

#arch #view
Views: 6
Go to post Open in MAX Report an inaccuracy
Loading image…
Признак нарушения архитектурных границ: чужой ID

Представьте: меняем особенности реализации своего сервиса, а дорабатывать приходится и его клиентов. Почему внутренняя интеграция стала общей проблемой? Предлагаю ещё один признак для проверки границ и потренировать архитектурную насмотренность. 🔭

Контекст

Конкретный пример.

Врач завершает осмотр и назначает следующий визит. Бэк мобильного приложения (BFF) сохраняет протокол осмотра и вызывает сервис задач. Тот бронирует время в календаре врачей и создаёт задачу на следующий визит.

Затем BFF вызывает сервис подтверждения записи, передавая ID протокола и ID бронирования. Подтверждение связывает бронь с состоявшимся осмотром. По правилам бизнеса такую бронь уже нельзя отменять, хотя технически это возможно.

Бронированием занимается сервис задач, а подтверждением – BFF. Поэтому сервис задач вынужден вернуть клиенту ID, полученный от календаря.

Проблема

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

Чем это грозит?

⚠️ Излишняя связанность. BFF участвует в бизнес-процессе, часть которого скрыта внутри сервиса задач. Стоит проверить, обосновано ли такое разделение ответственности.

⚠️ Хрупкость контракта. При замене календаря могут измениться формат и смысл ID. Тогда изменения затронут всех его потребителей.

⚠️ Рассогласование данных. При наличии доступа внешние системы могут изменить бронь по её ID в обход сервиса задач и нарушить связь между задачей и записью календаря.

Выявление проблемы

Признак нарушения границ:



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

Признак удобен при проведении ревью и подталкивает к обсуждению вопросов ответственности и стоимости будущих изменений:

▫️ Откуда пришёл ID?
▫️ Зачем он потребителю?
▫️ Является ли ID частью общесистемного контракта?

Это согласуется с идеей защищать потребителей от изменений за стабильным контрактом.

Варианты решения

Вариантов много, вот основные:

▫️ Оркестратор. Отвечает за завершение всего сценария и обработку частичных сбоев. Опционально: передать подтверждение сервису задач, если весь сценарий входит в его ответственность, тогда BFF получает результат без ID календаря.

▫️ Собственный ID. Сервис задач хранит соответствие между своим ID и ID календаря. Это отделяет публичный контракт от идентификаторов зависимости. Однако придётся адаптировать подтверждение: оно пока ожидает ID календаря. Обход сервиса задач потребует специально "добывать" исходный ID и строить отдельную интеграцию. Это усложняет и удорожает обход, вызывает вопросы при реализации и помогает удерживать границу. Но не заменяет контроль доступа.

▫️ Контроль доступа. Ограничить изменение броней, созданных сервисом задач, разрешёнными участниками процесса. Отдельно обеспечить проверку бизнес-запрета отмены подтверждённой брони. Это ограничивает обходные изменения, но требует настройки прав и специфичных проверок; зависимость публичного контракта от календаря остаётся.

▫️ Общесистемный контракт. Осознанно оставить ID календаря в API, договорившись о его смысле, стабильности и правилах изменения броней. Меньше переделок сейчас, но сильнее связанность.

Как выбрать

Выбор зависит от того, кто отвечает за бизнес-процесс, насколько важна независимость сервисов, и кто в праве менять ресурсы. Варианты можно сочетать, сопоставляя стоимость реализации и сопровождения с рисками будущих изменений.

Раскрытие детали реализации может стать практически необратимым решением: если другие команды построят на ней свои процессы, убрать её без их согласия и миграции уже не получится!

Короче, старайтесь не выносить сор из избы 😃

#tip #arch
Views: 12
Go to post Open in MAX Report an inaccuracy
VKontakte Telegram Odnoklassniki
Favorites at datool.ru

Follow the channel in your account

Sign up at datool.ru to add the channel “Архитектоника в ИТ” to favorites and track its metrics.

Sign up
For channel owners

Verify your channel

Sign in or sign up at datool.ru, then add our bot to the channel following the instructions in your account. Once ownership is verified, the lock disappears and channel management becomes available.

Sign in or sign up

Report an inaccuracy

Describe what needs fixing. If you have a source, add a link.

You are leaving datool.ru

The link leads to an external website. datool.ru is not responsible for its content — check the address before entering passwords or payment details.

Redirecting in 10 s

Go