Доброго времени суток Всем !
Свои 5 копеек.
1. Ядро с
а) классом для обновления приложения (с GUI для администрирования)
б) классом загрузки плагинов (с GUI для администрирования)
в) классом распределения интерфейсов в зависимости от типа загруженного плагина
г) классом распределения прав доступа к пунктам меню (с GUI для администрирования)
2. Плагины с реализацией функционала в новом потоке. (тогда при падении одного плагина все приложение не падает и не тормозит)
Это как у меня сложилось в голове и в реализации.
На выходе получаем (для примера)
Товарно-кассовая система,
драйвера для железа грузятся из плагинов ( можно одновременно иметь как несколько плагинов для одного типа оборудования так и для различного оборудования с выбором что использовать );
типы загружаемых плагинов разделены по группам функционирования ( если это драйверы оборудования то загрузить, установить сохраненные значения или по дефаулту, создать пункты меню для обеспечения администрирования, протестировать оборудование и ... выдать ответ -- "ОК")
( если это реализация бизнеслогики то выполняются необходимые действия для этого типа плагина ... )
То есть в зависимости от необходимости загружаем и используем или место кассира или место товароведа или место инспектора. и т.д.
Даже даем спецификацию необходимую для загрузки модуля сторонним разработчикам (весь наш код при нас и никто его не видит
) а далее по готовности используем что нам сваяли.
Мое мнение решение с применением плагинов дает более гибкий подход к реализации и использованию ПО. продукта.