Главное Авторские колонки Вакансии Образование
arrow-right Created with Sketch. Леонов Дмитрий 5 019 33 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Гайд: как самостоятельно создать большой и многофункциональный веб-сервис или как это было

Личный опыт написания веб-сервиса, включающего в себя 18 модулей и более 50 000 строк кода за 13 месяцев, совмещая с основной работой.
Мнение автора может не совпадать с мнением редакции

Меня зовут Дмитрий, мне 31 год. В начале своей профессиональной деятельности я работал в IT-сфере на различных должностях, от верстальщика сайтов, до руководителя отдела поисковой оптимизации и продвижения сайтов, позже - владел несколькими интернет-магазинами и студией интернет-маркетинга, управлял небольшой оптовой компанией с производством в Китае. За всю карьеру я официально работал программистом около 6 месяцев. Но при этом программирую я почти всю жизнь: люблю автоматизировать рутинные рабочие процессы. Хочу поделиться своим опытом создания достаточно большого проекта в одиночку с нуля. Сразу отмечу, большой проект реально создать одному и как видно из короткой биографической справки обо мне - для этого не нужно быть гуру программирования!

Немного статистики по платформе Youca.org:

  • 18 модулей
  • 253 файла
  • 52 867 строк кода
  • 13 месяцев разработки, совмещенных с основной деятельностью.

На что стоит обратить внимание

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

С чего начать?

Попробуйте максимально подробно изложить свою идею на бумаге (не обязательно писать карандашом или ручкой, напечатать на компьютере тоже сойдет :) ). Во-первых, расписывая свой проект, вы более полно сможете оценить картину и скорее всего увидите недоработки, которые сразу сможете улучшить. Во-вторых, все будет задокументировано, и вы ничего не забудете. В-третьих, по описанию попробуйте составить список задач, чтобы были более понятны дальнейшие шаги. Что касается формы описания, то я считаю, что это не имеет никакого значения. Не нужно пытаться использовать какие-то умные теории или методы, если вам не удобно потом будет с этим работать. Для себя я сделал простую таблицу сначала с названием пунктов меню, позже, когда стала понятна общая структура, я уже смог трансформировать таблицу в список модулей, описать примерный функционал каждого и некоторые их взаимосвязи. На данном этапе важно понимать состав частей будущего проекта, но совсем не обязательно детально расписывать функциональность каждого. В моем случае изначальное описание хоть и совпадает по составу с реализованным проектом, оно все же примерно на 30% отличается по функциональности.

Далее. Подводные камни

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

На каком языке разрабатывать сервис?

Сколько я ни старался найти наиболее подходящий язык программирования в статьях и на форумах, результатом стало понимание, что у каждого свой язык для решения конкретной задачи. Используйте тот язык, который вы лучше всего знаете! В моем случае – PHP (планировал использовать PHP-FPM, но позже удачно подоспел PHP7)

Какую базу данных использовать?

Тут ответ аналогичен предыдущему вопросу: ту, которую знаете лучше всего. В моем случае – MySQL.

С какого конца браться за список задач по написанию модулей?

Как не трудно догадаться, начинать нужно с основных модулей, но какие из них основные, если все вместе и есть ваш будущий сервис? В первую очередь нужно продумать глобальную бизнес-логику вашего приложения. Будет ли это один главный файл, например, index.php в корне сайта или стоит разбить весь проект на множество поддиректорий. Если ваш проект подразумевает регистрацию пользователей, то реализуйте в первую очередь именно этот функционал (регистрация, авторизация, логаут, смена учетных данных и т.п.). Дальше все пойдет легче, один модуль будет тянуть за собой другой.

Как вы будете проектировать бизнес-логику приложения?

Обычно, приступая к новому модулю, я сверялся со своей генеральной табличкой, дописывал/дорабатывал функционал, создавал все нужные файлы, накидывал в классе модуля все названия необходимых методов с интуитивно понятными названиями по собственному шаблону (например: getUserById) и только после этого приступал к кодингу каждого метода. Таким образом я как бы обрисовывал более наглядно себе текущую задачу.

Для упрощения работы рекомендую использовать небольшой ORM, чтобы не отвлекаться от бизнес-логики на работу с базой данных. Я использовал модель MVC (model – view - controller), в которой классы и методы, непосредственно выполняющие операции с базой данных, выносятся в отдельный файл (модель) и подключил простой ORM, если в будущем понадобится оптимизировать запросы к БД, то сделать это будет не сложно, они никак не связаны с бизнес-логикой. Достаточно будет просто заменить вызовы ORM на прямые запросы в методах моделей модулей.

Что потом?

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

Публикация приложения.

Для настройки веб-сервера я рекомендую связку nginx+PHP7+MySQL. Причем в качестве веб-сервера выступает только nginx, а не nginx в связке c Apache.

P.S. Не забудьте перед запуском приложения установить счетчик статистики на все страницы.

Еще несколько советов

  • Делайте бэкапы после каждой контрольной точки или по другому четкому правилу. Я делал бэкап в конце каждого рабочего дня, не зависимо от того, был ли он длиной в 14 часов или 30 минут. Бэкапы лучше делать на несколько носителей. Я бэкапил все на внешний жесткий диск и параллельно заливал архив в облако файлового хостинга.
  • Для дополнительной мотивации я рисовал себе график работы над модулями, выделял на каждый определенное количество времени. Даже если не укладываешься в отведенное время (а так чаще всего и бывает), то все равно ты всегда видишь прогресс, так он становится более осязаемый, когда в табличке зачеркивается очередной квадратик.
  • Иногда бывает такое время, что ничего не получается, все валится из рук, мысли разбегаются и никак не можешь сосредоточиться на работе. Мой вам совет: плюйте на работу и идите отдыхать, иначе можно наломать дров.

В следующей статье я поделюсь списком книг, которые я нашел полезными, которые помогли мне с мотивацией и информацией.

Статья подготовлена командой проекта Youca.org

+5
В избр. Сохранено
Авторизуйтесь
Вход с паролем