Pull to refresh
315.38
Skyeng
Крутейшая edtech-команда страны. Удаленная работа

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

Reading time3 min
Views5.2K

Привет! В эту субботу 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. А еще мы разыграем на митапе такого замечательного плюшевого слона и другие призы от компаний-партнеров митапа и сообщества. Розыгрыш пройдет только среди участников в офлайне.

Tags:
Hubs:
Total votes 18: ↑17 and ↓1+16
Comments0

Articles

Information

Website
www.skyeng.team
Registered
Founded
Employees
1,001–5,000 employees
Location
Россия
Representative
Alisa Kruglova