Эволюция «в стакане», разработка небольшого внутрикорпоративного проекта как вариант осмысления технологий и стимул к дальнейшим подвигам
Никогда серьезно не думал о том что когда нибудь стану программистом. По разным причинам. Тем не менее процесс программирования, чтение книг о программировании и все связанное с IT интересовало и захватывало. В итоге в один прекрасный день мне поручена самостоятельная разработка небольшого проекта.
Внутрикорпоративный мини-стартапИзначально постановка задачи была такова: веб-интерфейс обработки пользовательских запросов с согласованиями, оповещениями, разграничением полномочий, авторизацией, множеством различных справочников… В общем, несмотря на то что сайтик был слеплен «на коленке» в свободное время от остальных обязанностей, он оказался полезным и помог, помимо всего прочего, четко выстроить некоторые бизнес-процессы.
На определенном этапе все проекты работали по следующей нехитрой схеме: база данных, application server — Tomcat, странички формировались при помощи технологии jsp/servlet. В какой-то момент, начитавшись книжек про рефакторинг, XP, паттерны и антипаттерны, а также получив еще пару внутрикорпоративных заказов, опыт эксплуатации самописной системки, решил испробовать новую концепцию. Новая концепция была продиктована, в основном, тремя следующими требованиями:
- быстро проектировать и создавать проекты
- быстро вносить назревающие изменения, продиктованные пожеланиями пользователей
- заставить работать приложения легко и быстро
Чтобы реализовать первое — необходимо было перейти на использование неких шаблонов для всех часто использующихся элементов. Разумеется возникал вопрос стоит ли задействовать какую-нибудь готовую CMS или там фрэймворк какой-нибудь, но эта трезвая мысль была отметена желанием писать свой собственный код и слепой верой в возможности Java, свои собственные и вообще в наличие всего необходимого (в том числе времени и оптимизма) для построения своей собственной системы с нуля.
В итоге пришел к тому, что помимо собственно проектов с пользовательским веб интерфейсом, в моем воркспейсе появились проекты без оного. По замыслу это некие модули, в которых сгруппирован наиболее часто использующийся функционал, взаимодействие с которыми должно было осуществляться по http (сказалось влияние идей, изложенных в литературе про веб-службы). Группировка была осуществлена по следующему принципу: в любом из веб проектов должна быть форма логона и регистрации, соответственно выделяем это в отдельный подпроектик, включающий в себя как клиенскую так и серверную часть, таким же образом я поступил, например с контекстным меню и формой поиска.
Далее, для поддержки ajax (на базе которого было решено реализовать весь обмен данными между клиентом и сервером) и более полного контроля над объектами html страницы был широко задействован Javascript.
В каждом проекте с пользовательским интерфейсом, помимо серверной логики, всего лишь одна страница html, к которой подцеплены необходимые (опять же самодельные) javascript библиотеки. Эти библиотеки, в свою очередь организованы по вышеописанному принципу группировки, то есть, к примеру, скрипты, относящиеся непосредственно к форме логона — лежат в подпроекте Логон. Наиболее часто используемые скрипты, не разбросанные по профильным подпроектам, выделены в отдельный централизованный проект.
Итог эволюцииЗа счет использования всего перечисленного удалось более-менее стандартизировать (шаблонизировать) всю картину, разбить ее на логические компоненты. Приложения работают довольно быстро, по сравнению с первоначальным вариантом реализации интерфейса на базе jsp. К каждому элементу интерфейса я легко получаю доступ, завязываю на него логику и безболезненно внедряю новый функционал. В случае проблем с этим новым функционалом, либо в случае необходимости его апгрейда я знаю где искать, ибо функционал упорядочен и распределен в соответствии со спецификой. Внутренняя структура всех проектов максимально стандартизирована. Для реализации какой-то новой идеи достаточно либо скопировать целиком какой-либо из подпроектов с тем чтобы внести в него необходимые изменения и установить взаимосвязи с другими модулями либо элементами интерфейса.
Помимо реальных результатов, которые можно определить, как минимум понятием «оптимизация», я получил бесценный опыт проектирования, создания, сопровождения действующего приложения, новые стимулы для более глубокого изучения тех технологий, которые уже были применены, не говоря о том, что всегда есть что-то новое и интересное.
Следующим этапом напрашивается более широкое использование JQuery на стороне клиента, применение Spring framework. Кроме того есть желание реализовать какой-либо из модулей например на языке Python.