Гайд: как самостоятельно создать большой и многофункциональный веб-сервис или как это было
Меня зовут Дмитрий, мне 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