Я пытаюсь разработать систему, которая позволит обрабатывать файлы нескольких типов.Идея состоит в том, что существует единственное приложение для обработки фактических манипуляций с файлами на диске, в то время как разработчики могут создавать собственные библиотеки, которые смогут делать с файлами после загрузки все, что им захочется.
У меня сейчасструктура, которая выглядит следующим образом:
Исходное изображение
Где приложение публикует интерфейс IClient
, который пользовательские написанные библиотеки могут свободно реализовывать.С Client1
по Client3
каждая будет иметь свою реализацию и по-разному реагировать на каждый тип файла.
Метод Populate
в File
переопределяется в производных классах для вызова правильногоМетод PopulateFrom
в интерфейсе IClient
, передающий вызывающий файл.
Поэтому метод PopulateFrom
в классе, реализующем IClient
, передается файл определенного типа, так что он должен получить к нему доступ.базовые данные (CSVDataReader
или XDocument
в этом примере) для анализа в любые доменные объекты, которые он хочет.
Используя этот дизайн для каждого нового типа файла, который я добавляю в систему, я должен будудобавьте новый метод к IClient
, который не идеален.Чтобы сохранить совместимость с клиентскими классами, у которых нет метода, принимающего новый тип файла, мне нужно будет создать новый интерфейс, который конкретно поддерживает этот тип, и заставить новый клиент реализовать следующее:
Исходное изображение
Все это работает, но мне было интересно, есть ли лучший способ поддержки нескольких типов файлов без необходимости каждый раз добавлять новый интерфейс, возможно, используя шаблон проектирования