Не) ща расскажу, как бывает обычно:
1. Какой-то сеньор васян берёт проект, работает над ним, устраивает сложную архитектуру, радуется, как ему всё понятно и как ему кажется это будет легко поддерживать в дальнейшем и как он сюда добавит какие-то свои НОВАТОРСКИЕ штуки
2. Васяна убирают по причине ~надоел~, на его место берут 1-2 миддлов подешевле и менее заносчивых
3. Эти миддлы смотрят в код, понимают процентов 10 от тех абстракций, что наделал Васян и делают какой-то говнокод поверх архитектуры Васяна, в итоге проект превращается в кашу
Это я на примере кучи проектов из личного опыта, которые волей-неволей приходилось где-то менеджерить, где-то самому разбираться в умном говне Васяна (а он писал мне в личку буквально «ну да, там сложно, хех»), где-то и то, и другое. С другой стороны, было несколько проектов с говнокодом, но суперлегко поддерживаемых и переделываемых, даже если прошлый разраб пропадал раз и навсегда и на связь больше не выходил
Я же написал, почему так делают. Потому что например, если гвоздями прибиватся к какому либо фреймворку, любой его breaking change поломает вам все на свете, что чревато превращением проекта в безнадежное лигаси. Если будешь писать просто кнопка.перекрасить без лишних заморочек, а кнопку надо перекрашивать по результату нескольких асинхронных операций, будет много проблем если надо чёт поменять, надо юзать хитроумную асинхронную архитектуру. Будешь собирать компоненты руками - опять, любая переделка и тебе надо весь вайринг руками переписывать, нужен диай фрейм. Не дробить по слоям - хреново тестируется. Короче вся архитектура не для прекола а для решения задач. Нет задач, нет архитектуры. Я к тому, что при решении этих задач проще пользоватся примитивами которые имеют явные свойства/контракты.