Вот в чистом ядре твоей архитектуры, где смоделирована вся бизнес-логика и онтология, есть некоторый сквозной тип (например Деньги), которым пользуются сотни модулей и внутри ядра, и во внешних слоях.
По неведомым причинам этот тип решили переписать с нуля: другая внутренняя структура, другая реализация.
Ты должен гарантировать, что после смены реализации ни один модуль в проекте, ни существующий, ни будущий, не должен заметить разницы.
Как это сделать правильно, сегодня скажет любой джуниор: публичный API должен полностью совпадать с тем, что было. Те же методы с теми же сигнатурами, для каждого метода отдельно зафиксированы и соблюдены предусловия, постусловия и инварианты.
Сюрприз, но это не сработает, патамушта лемма Йонеды (буквальное совпадение по сигнатурам не гарантирует согласованности с гомоморфизмами, не даёт естественное семейство биекций, диаграмма не коммутирует).
Малышам полезно вспомнить утиную типизацию и LSP, если конечно это проверяется вашими тестами. До изоморфизма Карри-Ховарда, понятно, никакими тестами не добираемся, но хотя бы приближаемся.
А с ментатами, как гарантировать корректность такого рефакторинга, разбираем в Last Principles Framework.
Думайте.
Post #2614
529

- 🫡 26
- ✍ 10
- ❤ 5
- 🔥 2
- 🐳 2