Библиотека сайта rus-linux.net
Библиотека matplotlib
Глава 11 из книги "Архитектура приложений с открытым исходным кодом", том 2.Оригинал: matplotlib
Автор: John Hunter, Michael Droettboom, перевод: А.Панин
11.8. Выученные уроки
Один из наиболее важных уроков, усвоенных в ходе разработки библиотеки matplotlib, может быть описан с помощь выражения Le Corbusier: "Хорошие архитекторы используют заимствования". Авторы ранних версий библиотеки matplotlib были в основном учеными, самостоятельно изучившими программирование и пытавшимися выполнить поставленную задачу, а не обученными специалистами в области компьютерных наук. Поэтому с первого раза и не была создана подходящая внутренняя архитектура библиотеки. Решение о реализации доступного пользователю уровня сценариев, в большей степени совместимого с API MATLAB, принесло пользу проекту в трех различных аспектах: был предоставлен проверенный временем интерфейс для создания и изменения графиков, стал возможным простой переход к использованию matplotlib частью пользователей из большой пользовательской базы системы MATLAB, и, что наиболее важно для нас в контексте архитектуры matplotlib, у разработчиков появилась возможность провести несколько рефакторингов внутреннего объектно-ориентированного API без вмешательства в работу пользователей, так как интерфейс сценариев оставался неизменным. Хотя у нас также были и пользователи API (в отличие от пользователей интерфейса сценариев), большая часть этих пользователей обладала достаточным опытом, чтобы адаптировать свои разработки к изменениям API. Пользователи интерфейса сценариев, с другой стороны, могут разрабатывать код один раз и обладать объективной уверенностью в том, что он будет работать стабильно со всеми последующими релизами.
В ходе реализации внутреннего API рисования, хотя мы и использовали заимствования из GDK, не было приложено достаточных усилий для того, чтобы выяснить, подходит ли в нашем случае данный API рисования, поэтому нам пришлось затратить значительные усилия для того, чтобы после завершения разработки множества систем вывода данных с использованием этого API, расширить функции этих систем путем использования более простого и гибкого API рисования. Нам было бы удобно использовать спецификацию для операций рисования формата PDF [Ent11b], которая была создана с учетом многолетнего опыта работников компании Adobe, полученного при создании спецификации формата PostScript; это позволило бы нам получить начальную совместимость с самим форматом PDF, фреймворком Quartz Core Graphics и инструментарием для рисования Enthought Enable Kiva [Ent11a].
Одним из недостатков языка Python является то, что из-за простоты и выразительности этого языка разработчики обычно считают, что проще повторно спроектировать и реализовать необходимые существующие в других пакетах функции, чем провести работу по интеграции кода из этих пакетов. Для библиотеки matplotlib на ранних этапах развития была бы полезной интеграция с существующими модулями и API, такими, как тулкиты Kiva и Enable от организации Enthought, которые решают аналогичные проблемы, вместо повторной реализации функций. Интеграция с существующими пакетами, однако, является обоюдоострым мечом, так как она может сделать сборки и релизы более сложными и негативно повлиять на гибкость внутренней разработки.
Далее: К началу статьи