О декомпозиции систем

March 24, 2021

Дисклаймер: это небольшой линко-пост на тему, достойную главы книги

Наконец-то свершилась ваша мечта и вам досталось сделать проект с чистого листа. Наконец-то вы можете сделать всё правильно, а не воевать с легаси написанным сто лет назад людьми, которых вы никогда не видели.

Но как это сделать? Как сделать систему, за которую вас не будут проклинать ваши последователи?

Половину ответа я уже в каком-то виде описал в книге - это таблица эффектов приложения и компоненты.

Таблица эффектов - это описание того, к каким эффектам ведут те или иные сигналы. Или, другими словами, описание поведения программы - функциональные требования.

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

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

Так вот вторая половина ответа - это алгоритм перехода от таблицы эффектов к компонентам. Алгоритм примерно следующий:

  1. По таблице эффектов построить граф, в котором вершинами являются сигналы и эффекты, а рёбрами - связь сигналов с эффектами;
  2. Разбить это граф на подграфы с высокой связностью внутри подграфа и низкой связностью между подграфами;
  3. Всё, компоненты готовы - каждый подграф, это отдельный компонент, инкапсулирующий состояние изменяемое эффектами этого подграфа в результате обработки сигналов этого подграфа.

И на удивление этот простой алгоритм даёт прекрасные результаты.

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

По сути, они предлагают то же самое, но у них есть ряд отличительных черт:

  1. Самое интересное, что я себе точно заберу - делить и размечать разными весами операции чтения и записи;
  2. У них более простая таблица - строки это операции, а столбцы - это отдельные переменные состояния;
  3. Они догадались автоматизировать разбиение графа на подграфы. Учёные, что скажешь:) Либо графы у них получались слишком большими.

Таблица эффектов и алгоритм декомпозиции, были последними, как мне казалось, уникальными кусочками Эргономичного Подхода. Но в том, что в ЭП нет отдельных уникальных элементов тоже есть свои плюсы. Это значит что ЭП это не идеалистический бред сумасшедшего одиночки, а синтез кусочков, проверенных наукой и индустрией:)