Получи случайную криптовалюту за регистрацию!

Коля Митин говорит

Логотип телеграм канала @nickmitinsays — Коля Митин говорит К
Логотип телеграм канала @nickmitinsays — Коля Митин говорит
Адрес канала: @nickmitinsays
Категории: Без категории
Язык: Русский
Количество подписчиков: 224
Описание канала:

Заметки о проектировании, разработке, тестировании, автоматизации, CI/CD
Написать мне @nickmitin

Рейтинги и Отзывы

3.50

2 отзыва

Оценить канал nickmitinsays и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

1

3 звезд

1

2 звезд

0

1 звезд

0


Последние сообщения

2023-02-14 11:43:07 Как мы готовим MVC в Ларавеле

Мы активно используем Ларавель, потому что один и наших ключевых продуктов написан на нём. Ларавель — стройный MVC-фреймворк, с достаточно хорошей документацией. Тем не менее, есть некоторые особенности, которые мы привносим в парадигму разработки на этом фреймворке.

Пойдём от противного, чтобы показать, как мы используем MVC, то есть покажем ситуации, где можно написать код не в той части системы. Иными словам, как код случайно не в то место.

Сверху пирамиды у нас представление. В Ларавеле представления делаются на шаблонизаторе blade.
Симптомы протечки лишнего кода внутрь представлений:
— @php вставки. Вы пытаетесь реализовать какую-то сложную логику внутри представления, скорее всего этот код вообще протёк и сервиса (о них позже), через контроллер. Двойная протечка.
— вычисления или сложные условия внутри blade-конструкций. Скорее всего код протёк из контроллера, в котором вы недоготовили данные. Также код мог протечь из helper-функций, типа форматирования даты или времени.

Следующий уровень — контроллер.
Симптомы протечки кода внутрь контроллера.
— Запросы к базе данных (прямые или через ОРМ), прямые вызовы стороннего АПИ, запись/чтение файлов. Контроллер не должен знать откуда и как в системе появляются данные, это знают сервисы. Котроллер просит сервисы получитьСписокАктивныхПользователей(), сохранитьКомментарий(), добавитьЛайкКПубликации(). Как и откуда получаются эти данные, контроллер не знает.
— HTML или JSON формируется в контроллере. Это явно куски представления.

Далее сервисы.
Про сервисы я поясню, так как в ванильном Ларавеле их нет. В сервисах мы изолируем техническую часть получения/кеширования и обработки данных. Сервис знает про внешние АПИ, про модели и прочие внутренности системы. Тем не менее сервис не делает прямых запросов к данным, только через ОРМ или обёртки вокруг АПИ. Обычно сервис построен вокруг одной сущности или модели, а смешиваются они уже либо в контроллере, либо в метасервисе (об этом как-нибудь тоже напишу)

Симптомы протечки кода внутрь сервиса.
— Форматирование данных, генерация HTML или JSON. Это должно быть в представлении, через контроллер.
— Прямые запросы к БД или внешним АПИшкам. Только через обёртки.

И под всем этим лежат модели. С ними всё просто. Описывают данные и связи между ними абстрактно от системы хранения. Любая логика в моделях — это протечка кода из вышестоящих блоках.
277 viewsNick Mitin, 08:43
Открыть/Комментировать
2023-02-14 11:43:06 Написали тут про то, как работаем с MVC в Ларавеле
261 viewsNick Mitin, 08:43
Открыть/Комментировать
2023-02-14 10:25:49 Важная мысль про ChatGPT

Код читают намного чаще, чем пишут

Умение читать и понимать разный код для разработчика куда важнее, чем умение этот код писать. Даже то, что вам напишет ChatGPT нужно понять и простить пропустить через свой аналитический аппарат. То есть фактически сделать код-ревью
290 viewsNick Mitin, 07:25
Открыть/Комментировать
2023-02-06 19:52:11 Тестовое задание

Расскажу для чего нужно тестовое задание на примере Кортекса.

Когда мы размещаем вакансию, то будем получать десятки, а то и сотни откликов. Сайты с вакансиями щедро рассылают эти вакансии куда могут и откликается очень много людей. Большая часть откликов, увы, механические. По ним видно, что соискатель даже не читал вакансию. Я не очень понимаю, зачем эти люди хотят потратить своё время на вакансии, смысл которых им непонятен, но мне своего времени жалко.

Для нас тестовое задание — ключевой элемент вакансии. Оно решает две задачи:
1. Показывает насколько серьёзно настроен соискатель. Если хотя бы как-то его сделал, то действительно хочет получить эту работу. Приятно.

2. Знакомит соискателя с нашей технологической кухней: что мы используем, как мы это используем и как устроен наш процесс работы. С нашей стороны мы смотрим насколько хорошо соискатель разбирается в технологиях, которые будут нужны ему для решения задач.

Рассмотрим вакансию разработчика Laravel

Сначала пишем, чем нужно будет заниматься по смыслу:
Для развития внутренней системы для создания бренд-медиа мы ищем разработчика на Laravel 9. Хотим организовать работу над бэклогом.

Далее, какие навыки и технологии понадобятся, чтобы решать задачи:
Применяем TDD: Dusk и Pest.
PHP 8
Laravel 9
Pest и Dusk
Понимание принципов REST и как это реализуется в Laravel
Docker
Git, GitHub и GitHub Actions

Далее, что из этого обязательно, а чему можем научить в процессе:
Обязательно знание PHP, Laravel и GitHub, остальному при необходимости научим.

Далее, создав у соискателя в голове контекст, перечисляем типы задач, что будет делать:
Работать над развитием АПИ системы для создания бренд-медиа.
Реализовывать функции для административного интерфейса и шаблонов бренд-медиа для необходимостей фронтендеров.

Далее идёт блок про бонусы, мы его опустим. А в конце то самое тестовое задание, которое как раз и даст соискателю понять, чего мы от него ждём на уровне кода, а нам как он справится с нашими требованиями:

В данной вакансии задание состоит в том, чтобы максимально простыми средствами собрать рабочий продукт:

Соберите с помощью Laravel каталог исполнителей и их альбомов с песнями такой структуры:

Исполнитель
—-Название
—-Альбом
Исполнитель
—-Год выпуска
Песня
—-Название
—-Порядковый номер в альбоме

Одна и та же песня может быть включена в несколько альбомов, но под разными порядковыми номерами.

Тут всё можно скопипастить прямо из доков Ларавеля. Проверяем, умеет ли соискатель создавать модели и связи между ними: один-ко-многим и многие-ко-многим.

В качестве площадки для демонстрации АПИ подключите к нему Swagger, чтобы можно было проверить работу АПИ через Postman

Тут проверяем, умеет ли соискатель заворачивать модели в REST-API и прикручивать к АПИ автоматическую документацию. Тоже делается по стандартной документации Ларавеля.

Результат присылайте в виде репозитория в GitHub с инструкцией по запуску. Бонусом будет, если проект будет запускаться через docker compose.

Проверяем, умеет ли соискатель Пользоваться Гитхабом и умеет ли сделать так, чтобы его код можно было запустить не только на его компьютере. То есть нужно самому проверить, что оно запускается и написать инструкцию как это запустить. А Если завернёт всё это в образ для Докера и напишет docker-compose.yml, то вообще чума.

Задание примитивное и проверяет то, как человек работает с задачами, а не какой он крутой разработчик.

Как-нибудь напишу, чего на мой вкус не стоит присылать вместо тестового задания.
343 viewsNick Mitin, 16:52
Открыть/Комментировать
2023-02-05 15:44:53 Продолжите анекдот:

Заходит ChatGPT во фронтенд…
265 viewsNick Mitin, 12:44
Открыть/Комментировать
2023-02-03 13:32:35 Последняя модная страшилка: ChatGPT заменит разработчиков. Но разработчики в Кортексе не только не боятся этого, а ждут с нетерпением! Потому что наш принцип: «меньше кода → лучше».

Мы автоматизируем и шаблонизируем всё, что только представляется возможным: генерацию кода, процесс создания нового проекта, типовые сетапы для разработки, CI/CD.

У нас огромный приватный репозиторий с Ansible-скриптами, которые разворачивают сервера, создают окружения для проектов, устанавливают и настраивают софт, варят кофе.

И мы охотно делимся знаниями и опытом, поощряем изучение нового и повышение квалификации. Кортекс оплачивает курсы и другие программы обучения для своих сотрудников. Мы верим что хороший продукт рождается как побочный эффект хорошего и отлаженного процесса. Поэтому мы сразу же растим наших разработчиков, как архитекторов и проектировщиков, избавляя их от необходимости просто кодить.

Сегодня мы открыли 4 вакансии:
Laravel-разработчик — поддержка и развитие движка для создания бренд-медиа
Django Rest Framework-разработчик — поддержка и развитие движка для конструирования разных админок
Vue.js-разработчик — фронтенд для админок
Three.js-разработчик — интерактивные 3D-инструменты в админках

Приходите к нам работать!
291 viewsNick Mitin, 10:32
Открыть/Комментировать
2023-02-03 13:32:35 У Кортекса 4 вакансии. Приходите к нам работать, если хотите больше проектировать и меньше кодить.
228 viewsNick Mitin, 10:32
Открыть/Комментировать
2023-02-02 14:53:29
У Почты России очень предусмотрительный архитектор АПИ, все возможные статусы постарался предусмотреть.
284 viewsNick Mitin, 11:53
Открыть/Комментировать
2023-01-27 14:46:33 Шаблонизация против универсализации

Мне известны два подхода к построению инфраструктурных проектов. Проектов, на основе которых, делаются другие проекты: шаблонизация и универсализация.

Универсализация — попытка учесть и предусмотреть все сценарии, которые могут понадобиться пользователю. Иным словами — снабдить болванку огромным количеством настроек, при этом не давая лезть под капот. Это рискованный путь, в результате которого создатель конечного продукта будет в итоге натягивать сову на глобус. А разработчик инфраструктурного проекта в какой-то момент разрешать конфликты между настройками, добавляя новые настройки. Боль, смэрт, короче.

Универсализацией болеют все ЦМСки. Пока ты играешь по их правилам — всё норм, но любая нестандартная фича приносит страдания.

Шаблонизация — создание скелета с минимальным ценным набором функций. Разработчик конечного продукта может лазить под капот, менять там всё как нужно, относительно просто добавлять новые функции, удалять ненужные, изменять те, которые не подходят под задачу.

Проблема с шаблонизацией в стратегии обновлений. Например, если исправить баг в шаблоне, то его будет проблематично накатить на все произведённые от него проекты. Хотя с другой стороны разработчики и так боятся обновлять версии библиотек, потому что даже универсальная может поломать зависящий от неё код.

В качестве примера универсализации против шаблонизации я приведу пример двух АПИ: Битрикса24 и АмоЦРМ.

Под Битриксом24 лежит обычный Битрикс, который швейцарский нож. Поэтому его АПИ — это костыли вокруг битриксовых инфоблоков. Менять ядро же нельзя. В результате его АПИ контринтуитивное, схожие по смыслу задачи решаются разными способами, а сущности перемешаны. Пример: понятие Статус хранится в одной таблице, из которой ты выбираешь список статусов по их типу.

АмоЦРМ — ЦРМка от рождения. АПИ структурировано, представляет собой классический REST, спроектированно под понятные задачи.

Продолжение следует...
315 viewsNick Mitin, edited  11:46
Открыть/Комментировать
2023-01-26 15:15:49
Вопрос из мира SoC. Знаете, как получился Четвергьник?
238 viewsNick Mitin, 12:15
Открыть/Комментировать