Говорим, как структурировать код

    Привет! В эту субботу PHP-чат Нижнего Новгорода проведет свой четвертый митап с интерактивной трансляцией. Доклады подготовят Валентин Удальцов из Москвы и Денис Юрьев из Новосибирска — те, кто придут очно, смогут вдоволь наобщаться с ними на афтепати в центре города, те, кто будут смотреть онлайн — задать вопросы текстом или голосом прямо из браузера.

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

    Денис Юрьев (тимлид в Skysmart от Skyeng) — расскажет, как упаковать продукт в переменную

    О чем твой доклад?

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

    Поэтому когда в Skyeng решили запускать новые предметы — русский, шахматы, физику, обществознание — на базе нашей с командой платформы для изучения математики, я предложил: «А давайте мы своими силами». Поддержка новых репозиториев казалась неинтересным, а с учетом планов на десяток потенциальных проектов — самоубийственным решением. Поэтому мы пошли новой дорогой.

    В докладе поделюсь историей в деталях, как мы спланировали архитектуру, на какие «грабли» Symfony наткнулись в процессе — и почему оно у нас вообще получилось. 

    На митапе мы будем много говорить о том, как структурировать код. Дай совет самому себе из прошлого что делать, не делать и к чему это приведет?

    Пораньше начать изучать практики других языков программирования и даже другие прикладные области. 

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

    Когда я начал смотреть, как происходит разработка на Unity, а там используется паттерн ECS – тут же захотелось и в PHP разбивать код на более мелкие, менее связанные части. Выделив небольшой осмысленный кусочек логики в модуль (отправка сообщения, какая-то конкретная операция над определённым видом данных и т.п.), мы получим возможность переиспользования, комбинирования, даже более простое юнит-тестирование. 

    Расскажи историю, которая не вошла в твой долклад, но будет полезна в контексте твоей темы.

    Однажды нам надо было запустить проект в сжатые сроки. Какое-то внятное описание бизнес-логики при этом отсутствовало, а область была очень сложной, и мы не входили в целевую аудиторию.

    Казалось бы, стоило начать писать код, а понимание придет в процессе – но вместо этого мы сели и «на пальцах» начали разбирать очень сложный механизм будущего проекта. Как всё работает от и до, внутри и снаружи. Это было заразительно, появлялись идеи, нам активнее помогали коллеги. 

    К концу третьего дня (а это была значительная часть нашего тогдашнего сжатого срока) у нас на руках было полнейшее понимание, что и как работает. Не написав ни строки кода, мы уже знали, что за чем будет идти, как распараллелить работы, что за сервис мы получим в итоге и что должно поставляться в mvp.

    Вместо хаотичных вопросов и непонятных задачек, мы приходили в другие команды с подробным описанием того, что нам нужно, с контрактами и пространством для обсуждения. Приходили сильно заранее, чем если бы дошли до этого, начав писать код «вслепую». 

    История закончилась хорошо – запуск состоялся в срок, все получили классный опыт предварительного исследования требований и ведения переговоров «на берегу». С тех пор я стараюсь как можно плотнее понимать бизнес проекта – это делает сильнее и проект, и тебя как профессионала.

    О чем с тобой еще можно поговорить на митапе?

    Архитектура проектов, микросервисы, информационная безопасность и почему жонглирование четырьмя шариками – самое неинтересное занятие на свете.

    Валентин Удальцов (тимлид в Happy Inc., автор канала «Пых») — расскажет, как структурировать код, чтобы не получить большой ком грязи

    О чем твой доклад?

    Я сравню подходы package-by-type, package-by-layer, package-by-feature в контексте Agile и поговорю про принципы проектирования пакетов Роберта Мартина. Покажу пример организации модулей в проекте на Symfony, а также инструменты в PHP, которые помогут следить за связанностью модулей и направлением зависимостей.

    Дай совет самому себе из прошлого что делать и не делать в разработке?

    Что делать — помимо SOLID изучать Package Principles. Что не делать — не воспринимать документацию к фреймворкам как образец структурирования кода.

    Расскажи историю, которая не вошла в твой долклад, но будет поучительна в контексте твоей темы.

    Очень важно периодически ставить под вопрос привычные практики: в какой-то момент я стал фанатом разбивки кода по слоям, но после нескольких споров в чатах телеграма решил попробовать альтернативный подход, — и только тогда увидел за деревьями лес. 

    О чем с тобой еще можно поговорить на митапе?

    Про трейты, композицию, статанализ или любой пост из моего канала «Пых».

    p.s. А еще мы разыграем на митапе такого замечательного плюшевого слона и другие призы от компаний-партнеров митапа и сообщества. Розыгрыш пройдет только среди участников в офлайне.

    Skyeng
    Крутой edtech с удаленкой для айтишников

    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое