Скачать CV

Architecture

Фича, которая помещается в одну папку

LaraBoom держит ресурс, поля и Service рядом. Host routes и app/Http это папки, которые я не создаю.

Утро ушло на баг картинки заметок по пяти деревьям Laravel. Модель в app/Models, контроллер в app/Http, FormRequest рядом, сервис в app/Services, сидер в database. Путь загрузки в одном файле не совпал с URL, который ждала сетка Vue. Host routes/ и app/Http это папки, которые прятали расхождение.

LaraBoom кладёт определение, атрибуты и Service в Resources/Note. Маршруты так же, в Routes/Auth. В host-приложении нет routes/, нет app/Http, нет верхнего Services. JSON живёт под /api.

Посетитель раскладку папок не видел. Я видел, каждый раз, когда плитка указывала на файл, который маршрут положил в другое место. Это не вкус. Это правило, чтобы маленькое портфолио не вырастило второй фреймворк внутри первого.

Фича это одна папка. Читайте сверху вниз без прыжков по дереву.
Фича это одна папка. Читайте сверху вниз без прыжков по дереву.

Чем владеет Service

Хранение картинок, нормализация значений и seed-строки ушли из тел маршрутов в Service. Метод маршрута читается как валидация, вызов сервиса, возврат ресурса. Два одинаковых нормализатора картинок стали видны и слились.

Следующий разрез это размер. Сервис, который и файлы кладёт, и HTML форматирует, это две работы. Граница идёт по данным, не по экрану. Картинки заметок остаются у Note. Cookie авторизации у Auth. SharedImageService я не завожу, пока третий ресурс не скопирует те же десять строк.

Когда санитайз HTML лег рядом с ключами списка Redis в одном Service, сброс кэша начал зависеть от DOM-хелпера. Тест сброса падал на смене строки в подписи фигуры. Colocation это не один файл на весь продукт. Это одна папка на ресурс и Service, у которого всё ещё одна работа.

Маршрут валидирует, вызывает сервис, возвращает ресурс.
Маршрут валидирует, вызывает сервис, возвращает ресурс.

Сиды как спецификация

Каждая seed-строка несёт en, ru и de. Это поймало форму, которая сохраняла только активную локаль и теряла две другие. Ещё это гоняет сетку: короткие заголовки, длинные, без картинок, каждый размер плитки.

Цена в том, что три языка держатся руками. Правило: пустой локали в сиде нет, и тест это проверяет. Когда файл Service вырос больше экрана HTML сидов, статьи уехали в Note/Articles. Так уже вышло. Файл ресурса остался маленьким.

Паттерны Demo в пакете это вторая половина спецификации. Если host заводит namespace контроллеров, следующая фича его скопирует. Сначала читаю ресурс Demo, потом добавляю папку host в том же виде. Тесты бьют в /api, не в именованную группу маршрутов, которую пришлось бы собирать в routes/web.php.

Какой опыт из этого

Когда фича ломается, открываю одну папку. Если для пути картинки нужно пять деревьев, фича уже вышла из формы LaraBoom.

Host app/Http и Shared-сервису на две копии десяти строк я не верю. Маршрут валидирует, Service делает работу, ресурс отдаёт JSON под /api.

Правило, которое оставляю: сидить все три локали, уносить HTML статей из Service, когда он не влезает в один экран, совпадать с Demo. Второго фреймворка в host нет.

К заметкам