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