пятница, 8 апреля 2011 г.

Плагиностроение

На RSDN.ru в форуме по архитектуре программного обеспечения большой аншлаг. Еще бы! Вечные же вопросы задеты: что делать и кто виноват нужны ли плагины в софтине Икс, и как вообще организовать интерфейс плагинов. Всё как-то собирался рассказать, как я проектировал Plugin API для Aml Pages. А главное рассказать миру, какие ошибки допускал, как их исправлял, и на что именно стоит обращать особое внимание.

Но, как водится, если я чего задумал, то выпью обязательно (© В.С. Высоцкий). Выпито достаточно, и естественно, о плагиностроении не написано ни строчки до сих пор. А сказать-то есть чего. Основные архитектурные черты моего Plugin API как раз и описал в посте на RSDN.ru. Но в нем только самые главные черты – взгляд на вещи, а вопросов на самом деле тьма:

  • Могут ли плагины интегрироваться в пользовательский интерфейс хост-приложения?
  • Плагин инициализируется хост-приложением при старте или по требованию? Единожды или многократно?
  • Как взаимодействует плагин и хост-приложение в совместно используемой памяти? Или проще говоря: кто и как выделяет память, и кто, как и когда ее освобождает.
  • Как обеспечивать обратную совместимость старых плагинов, и новых версий Plugin API?
  • Как проектировать основные структуры данных для обмена информацией?
  • Какие сервисы должно или может предоставлять хост-приложение? Или иначе: может ли плагин “попросить” выполнить какую-либо работу само хост приложение.
  • Нужна ли поддержка событий? Т.е. должно ли хост-приложение извещать плагин о возникновении некоторых событий, изменений.
  • Как разруливать ситуацию, если есть две версии хост-приложения Unicode и ANSI?
  • Если хост-приложение локализовано на несколько языков, то на каком языке должен быть UI плагина?

В общем, вопросов вагон и маленькая тележка. И все они на 99 процентов будут зависеть от архитектурных решений. Именно их придется продумывать в первую очередь. И неправильные решения в таких вопросах вызовут наибольшие проблемы потом. А проблемы будут! Первая версия моего Plugin API, к примеру, и вовсе ушла в помойку – все пришлось переписать с нуля. Но вот начиная со второй версии, архитектуре Plugin API я уделял максимум внимания – и в той или иной степени она осталась в Aml Pages и поныне. О да, архитектура претерпела ряд весьма значительных изменений. Но все они были пожалуй в сторону развития, а не полного переписания с нуля.

Во-о-о-от, значитъ! Будем считать это первым блин комом. Глядишь, этот пост в последствии и заставит меня все таки рассказать побольше о плагиностроении. Ибо пока сам пишешь, все настолько по полочкам разложишь, что конкретный мозг просветляется Plugin API только улучшается.