Конечно, я надеялся все переписать все на Java/Groovy, однако вовремя остановился - это оказалось слишком дорого и больно. В итоге мы остановились на Perl и это позволило:
- Постепенно переписывать работающий код по частям и повторно использовать некоторый унаследованный код после минимального рефакторинга
- Не переучивать коллег - разве что более осознанно подойти к coding conventions
Значительная часть как старого, так и нового кода в итоге оказалась внутри модулей, написанных в процедурном стиле и пригодных к использованию в качестве автономных утилит:
Но чаще модули не запускаются вручную сменным инженером или кроном, а собираются в более крупные единицы:
- Юниксовые демоны, написанные с использованием Proc::Daemon (Net::Daemon оказался слишком умным) и запускаемые инит-скриптом в стиле SysV (никаких новомодных systemd)
- Web-приложения, использующие PSGI согласно последней моде
- Опираясь исключительно на спецификацию - в этом случае разбор URL, параметров и заголовков, возвращение требуемого Content-Type, шаблонизация и многое другое становятся проблемами самого разработчика
- Используя Plack - эталонную реализацию спецификации, которая предлагает стандартизованный способ декомпозиции приложений (в т.ч. выделения Middleware и специального DSL для настройки и склеивания разных приложений в одно), также обросла кучей разных полезных плагинов
- Используя один из полноценных web-фреймворков, хотя на самом деле их, похоже, всего лишь 2 - Dancer и Mojolicious
Сейчас весь старый код работает на последнем оставшемся сервере с Slakware 12.2.0 (который поначалу было едва справлялся с нагрузкой а сейчас почти отдыхает) и потихоньку переползает на новые сервера с ALT Linux. В последнем пришлось обновить Mojolicious, Plack и Starman, который используется в качестве самостоятельного web-сервера без всяких фронтендов типа nginx и тем более apache. Я также опакетил evpsgi и начал было перепиливать сборку uwsgi, однако быстро потерял к ним интерес - поэтому до репозитария они не добрались.
2 комментария:
Когда-нибудь вы поймете, что использовать Моджолишес - очень удачная идея. А вот с отказом от модульных тестов я настоятельно рекомендую как можно скорее передумать, пока еще не поздно. Тут люди головы ломают, как бы их прикрутить, а вы, видите ли, выпиливаете! Никаких эмуляторов писать не нужно, используйте Test::MockObject и Test::MockModule. Осмелюсь также предложить к прочтению мою заметку: http://eax.me/unit-testing/
Спасибо, мы подумаем еще раз ;)
Отправить комментарий