DRY — один из главных принципов разработки. Каждый уважающий себя разработчик стремится упаковать повторяющуюся функциональность в модуль, чтобы решить задачу один раз и переиспользовать.
Но у каждого проекта — свои, особенные требования. Поэтому самое сложное в создании модуля — не функциональность. Самое сложное — обеспечить гибкость: чтобы модуль подошёл не только автору, но и тысяче чужих проектов, каждый из которых захочет чуть-чуть своего.
В качестве антипримера — модули Serverpod.
В Serverpod есть готовые модули аутентификации и чата. Выглядит подарком: подключил — и в проекте логин и мессенджер из коробки. Ровно то, что обещают все фреймворки «с батарейками».
А теперь реальность. Модели этих модулей живут внутри модуля. Пользователь — это их
UserInfo, сообщение — их модель, таблицы — их таблицы. В рамках демо всё прекрасно. Но продукту всегда нужно больше: поле к пользователю, свой флоу верификации, вложения в сообщениях, свои права на канал. И здесь стена: чужую модель не расширить. Варианта два — городить параллельные таблицы со склейками или форкать модуль. А форк — это навсегда: его придётся тащить через каждое обновление фреймворка. Ад поддержки, без преувеличения.Это не претензия к Serverpod — он отличный фундамент, и DartWay построен поверх него. Это ловушка, в которую попадает почти любой «готовый модуль»: чем больше функциональности зашито в чужие модели, тем быстрее инструмент из ускорителя превращается в тормоз. Причём стена обнаруживается не в день установки, а через месяц, когда переделывать уже дорого.
DartWay спроектирован от обратного принципа: фреймворк не должен владеть моделями приложения.
Аутентификация: весь флоу готов — телефон, одноразовый код, сессии, переживающие перезапуск. Но пользователь — это модель приложения
UserProfile, в базе приложения, с любыми полями: роли, аватар, всё, что нужно домену. Добавить поле = добавить поле. Не форк.Отсюда формула DartWay: инструменты должны снимать рутину, не забирая гибкость. Всё сложное — авторизация, права, реалтайм, CRUD — решено один раз и по-нормальному. Но все модели остаются моделями приложения, вся логика — логикой приложения, и ни в одной точке нет двери, за которой «дальше только форк».
Через несколько дней DartWay выходит на pub.dev — это утверждение можно будет проверить на своём проекте.