Я планирую переписать часть нашего приложения на C # (в настоящее время устаревший код VB6). Модуль, с которого я начинаю, отвечает за импорт данных из различных систем в нашу базу данных. Приблизительно 5-6 раз в год новый клиент просит нас написать новый импорт для системы, которую они используют. В настоящее время это требует от нас выпуска новой версии нашего программного обеспечения для каждой новой опции импорта, которую мы добавляем в приложение.
Одной из целей переписывания является создание подключаемых модулей поддержки приложений. Каждый новый импорт может стать отдельной сборкой, которую хост-приложение распознает и позволит конечному пользователю взаимодействовать. Мы надеемся, что это в некоторой степени упростит жизнь, так как мы можем просто поместить новую сборку в каталог, и она будет распознана и использована основным (хостом) приложением.
Один из вопросов, с которыми я борюсь, касается различий между вариантами импорта, которые мы в настоящее время поддерживаем. В некоторых случаях мы фактически позволяем пользователю указывать на каталог и читать все файлы в каталоге в нашей системе. В других случаях мы позволяем им указывать на один файл и импортировать его содержимое. Кроме того, некоторые импорты имеют ограничение диапазона дат, которое применяется пользователем, а другие нет.
Мой вопрос заключается в том, как я могу спроектировать приложение таким образом, чтобы обеспечить некоторую гибкость при импорте, который мы создаем и поддерживаем, и в то же время реализуя общий интерфейс, который позволит хост-приложению легко распознавать плагины. и варианты, которые каждый из них предоставляет пользователю?