Александр Макаров / Yii core team
https://slides.rmcreative.ru/2019/devconf-packages/TTL объекта = ~20 сек.
Оперативно (в кратковременной памяти) человек может оперировать малым числом объектов:
Архитектуру изобретают для того, чтобы совладать с неподъёмно сложными системами.
Для мозга неподъёмность начинается чудовщно скоро.
© 2000 Robert Martin
Группа единиц кода (классов)
REP, CCP, CRP
ADP, SDP, SAP
The granule of reuse is the granule of release
Группируйте и готовьте для реюза. Релизьте версионируя. SemVer.
Classes that change together are packaged together
Изменение не должно вылезать за пределы пакета.
Classes that are used together are packaged together
Пакеты должны быть сфокусированными. Использоваться должно всё.
Фокусируйтесь на CCP и REP на начальных стадиях.
The dependency graph of packages must have no cycles
Если есть циклы, проблема вызывает лавину.
Для PHP есть clue/graph-composer.
Но нужно исключать не интересные пакеты (PR #45).
Чем меньше зависимостей, тем проще...
Depend in the direction of stability
Не получится строить стабильное на нестабильном.
A package abstractness should increase with stability
Стабильные пакеты абстрактны. Гибкие конкретны.
Ось X — абстрактность, ось Y — нестабильность.
Иногда 0, 0 — OK. Strings, arrays, stdlib.
Расстояние от главной линии. 0 - хорошо. 1 - плохо.
Как и SOLID, дополнительные принципы и метрики — не догма, но могут быть полезны.
Правильное проектирование пакетов вызывает взрывное дробление. Это страшно.
Принципы позволяют не скатиться в left-pad или монолит.