Как обеспечить плагин с возможностями данных? - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть приложение, в котором я хочу предоставить людям, которые пишут плагины для него (плагины создаются путем реализации базового интерфейса, а затем я загружаю .dll). Я хочу дать им возможность создавать настройки и сохранять данные в моей существующей базе данных. Я хотел бы сделать это без необходимости создавать таблицу для каждого плагина - но если это требуется, я готов это сделать. Я предложил два основных сценария:

  1. Дайте плагину интерфейс, где он может получить словарь и сериализовать его в XML и сохранить его в моей базе данных.

  2. Плагин должен содержаться в файле .zip с файлом манифеста (мое собственное изобретение), где он содержит скрипт create sql и скрипт удаления для таблиц.

Первый имеет ограничения по отношению к сложным типам данных. Второй имеет большую сложность в плагине, так как он должен быть в .zip-файле и распакован и т. Д ...

Пожалуйста, дайте совет относительно любого из этих подходов или альтернатив.

Приветствия

Ответы [ 4 ]

2 голосов
/ 14 декабря 2010

Ваш конструктор плагинов должен получить объект SettingRepository, который предоставляет методы для сохранения настроек и их сохранения обратно

public MyCustomPlugin(PluginId id, SettingsRepostiory settingsRepository)
{
    _id = id;
    _settingsRepository = settings;
}

public void SomePluginMethod()
{
    PluginSettings setting = settingsRepository.Settings.WithId(_id);
    //...
}

где PluginSettings действительно может быть словарем, который сериализован в XML

1 голос
/ 14 декабря 2010

Я немного сомневаюсь в варианте 2, так как вы предоставляете сторонним пользователям доступ к написанию SQL непосредственно для вашей базы данных.Однако вариант 1 кажется осуществимым и безопасным.Как сказал @Euphoric, вы можете использовать несколько клавиш, если вам нужно делать более сложные вещи.

0 голосов
/ 14 декабря 2010

Зависит от того, насколько сложны плагины.

Первый подход идеален, если мопсам нужны только настройки.В этой ситуации я не вижу никаких ограничений первого метода.Второй способ не дает ничего нового.Вы можете получить ту же информацию, что и в файле манифеста в структуре данных, и извлечь ее из метода интерфейса плагина.Это проще, потому что вы управляете только DLL-файлом.Также, если файл очень сложный, вы можете поместить его в ресурс в dll.В вашей базе данных вы можете сохранить в таблице что-то вроде: plugin_name_settingname, значение в таблице настроек, которую вы используете для всех плагинов.

Мне когда-то приходилось поддерживать механизм плагинов, где плагины встраивали свои собственные таблицы.В этом случае вы можете получить новую схему tabels и имена в методе интерфейса, который подключает implenet.Затем вам нужно создать это в базе данных.Это как инсалл для плагина.

0 голосов
/ 14 декабря 2010

1-й подход кажется нормальным.Если приложение хочет сохранить сложную конфигурацию, оно может сохранить ее как несколько ключей или сериализовать некоторый сложный объект конфигурации в строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...