Я работал над этой системой плагинов. Я думал, что прошел дизайн и начал реализацию. Теперь мне интересно, стоит ли мне пересмотреть мой дизайн. Моя проблема заключается в следующем:
В настоящее время в моем дизайне есть:
Интерфейсный класс FileNameLoader
для загрузки имен всех общих библиотек, которые необходимо загрузить моему приложению. загрузить все файлы в каталоге, загрузить все файлы, указанные в XML-файле, загрузить все файлы, введенные пользователем и т. д.
Класс интерфейса LibLoader
, который фактически загружает общий объект. Этот класс отвечает за загрузку общего объекта только после того, как ему присвоено имя файла. Существует несколько способов загрузки разделяемой библиотеки. то есть используйте RTLD_NOW
/ RTLD_LAZY
...., проверьте, загружен ли lib и т. д.
ABC Plugin
, который загружает нужные мне функции из дескриптора в библиотеку после того, как этот дескриптор предоставлен. Есть так много способов, которыми это может измениться.
Класс интерфейса PluginFactory
, который создает Plugin
с.
Азбука PluginLoader
, которая является материнским классом, который управляет всем.
Теперь моя проблема в том, что я чувствую, что FileNameLoader
и LibLoader
могут войти внутрь Plugin
. Но это будет означать, что если кто-то хочет просто изменить RTLD_NOW
на RTLD_LAZY
, ему придется изменить Plugin
класс. С другой стороны, я чувствую, что здесь слишком много уроков. Пожалуйста, дайте некоторую информацию. Я могу опубликовать код интерфейса, если это необходимо. Заранее спасибо.
EDIT:
Подумав об этом, я пришел к выводу, что больше интерфейсов лучше (по крайней мере, в моем сценарии). Предположим, что есть x
реализаций FileNameLoader
, y
реализаций LibLoader
, z
реализаций Plugin
. Если я храню эти классы отдельно, я должен написать x + y + z
классы реализации. Затем я могу объединить их, чтобы получить любую возможную функциональность. С другой стороны, если бы все эти интерфейсы были в классе Plugin
, мне пришлось бы написать x*y*z
классы реализации, чтобы получить все возможные функциональные возможности, которые больше x + y + z
, учитывая, что для интерфейс. Это только одна сторона этого. Другое преимущество состоит в том, что назначение интерфейсов становится более понятным при наличии большего количества интерфейсов. По крайней мере, я так думаю.