Библиотека сайта rus-linux.net
GNU Mailman
Глава 10 из книги "Архитектура приложений с открытым исходным кодом", том 2.Оригинал: GNU Mailman
Автор: Barry Warsaw
Перевод: А.Панин
10.10. Выученные уроки
Хотя в данной главе и представлен обзор архитектуры версии 3 системы Mailman, а также подробный обзор процесса эволюции этой архитектуры в течение 15 лет существования программного продукта (после трех значительных переработок кода), существует много интересных архитектурных решений, примененных в рамках Mailman, которые мне не удалось затронуть. Они включают в себя подсистему конфигурации, инфраструктуру тестирования, уровень для работы с базой данных, программное использование формальных интерфейсов, архивирование, стили списков рассылки, команды из сообщений электронной почты и интерфейс командной строки, а также вопросы интеграции с используемым сервером электронной почты. Свяжитесь с нами с помощью списка рассылки разработчиков системы Mailman в том случае, если вам интересны эти вопросы и вы хотите получить более подробное описание.
- Используйте технику разработки через тестирование (test driven development - TDD). Другого пути в действительности не существует! В версии 2 системы Mailman очень не хватало набора автоматизированных тестов и, хотя и справедливо утверждение о том, что не вся кодовая база версии 3 системы Mailman затрагивается существующим набором тестов, большая часть все же тестируется и весь новый код должен быть подвергнут тестированию либо с помощью
unittests
, либо с помощьюdoctests
. Использование техники разработки через тестирование является единственным способом проверки того, что все сделанные вами сегодня изменения не приводят к регрессиям в существующем коде. Да, техника разработки через тестирование иногда замедляет процесс разработки, но стоит рассматривать это замедление как инвестицию в будущее качество вашего кода. Таким образом, отсутствие качественного набора тестов означает то, что вы просто теряете свое время. Запомните мантру: не протестированный код является неработоспособным. - Следите за манипуляциями с байтами/строками с самого начала. В Python 3 проведено жесткое разделение между текстовыми строками в кодировке Unicode и байтовыми массивами, которое, хотя изначально и воспринимается болезненно, но впоследствии оказывается значительным преимуществом, используемым для разработки корректного кода. В Python 2 эта граница была размытой, так как строки могли быть как в кодировке Unicode, так и 8-битными ASCII-строками, при этом для их преобразований использовались некоторые автоматизированные механизмы. Несмотря на то, что такое представление строк выглядело достаточно удобным, проблема этой размытой границы была первостепенной причиной ошибок в версии 2 системы Mailman. Также этот способ представления строк не являлся полезным ввиду того факта, что сообщение электронной почты, очевидно, сложно систематизировать как набор строк и байт. Технически представление входящего сообщения электронной почты является байтовой последовательностью, но эти байты практически всегда являются символами из таблицы ASCII и существует большое желание производить манипуляции с сообщением в текстовой форме. Стандарты, относящиеся к сообщениям электронной почты, описывают то, как читаемый человеком текст в отличной от ASCII кодировке может быть безопасно закодирован, поэтому даже такие задачи, как поиск префикса
Re:
в заголовкеSubject:
будет реализован с помощью операций для работы с текстом, а не операций для работы с байтами. Принципом функционирования системы Mailman является преобразование всех входящих данных из байтового представления в строки Unicode так быстро, как это возможно, внутренняя обработка строк с использованием кодировки Unicode и преобразование назад в байтовый поток только при формировании исходящих сообщений. Важно, чтобы были абсолютно ясны с самого начала периоды осуществления обработки байт и периоды осуществления обработки текста, так как это модель будет очень сложно модифицировать впоследствии. - С самого начала производите интернационализацию вашего приложения. Вам действительно хочется, чтобы ваше приложение использовала только малая часть англоязычных пользователей со всего мира? Подумайте о том, какое количество замечательных пользователей игнорируется! Не так сложно начать процесс интернационализации, причем существует множество хороших инструментов для упрощения этого процесса, многие из которых были впервые применены в системе Mailman. Не беспокойтесь о том, с каких переводов начать; если ваше приложение будет доступно для носителей множества языков со всего мира, в вашу дверь обязательно постучат переводчики с предложениями помощи.
- Основной вебсайт
- Ресурс wiki проекта
- Список рассылки разработчиков
- Список рассылки пользователей
- Канал IRC в сети Freenode:
#mailman
Во время написания этой главы мы с глубокой скорбью узнали о кончине Tokio Kikuchi (http://wiki.list.org/display/COM/TokioKikuchi), профессора из Японии, который внес большой вклад в разработку Mailman и обладал исключительными знаниями в области вопросов интернационализации и характеристик японских программ для чтения сообщений электронной почты. Нам будет очень не хватать его.
Далее: К началу статьи