В общем, предположим задача получать данные из разных типов файлов: txt,access и т д.
Для этого я хочу сделать интерфейс:
interface IDataExtracotr<TOut>{
TOut GetData(string pathToFile)
}
Далее я хочу создать класс на каждый тип и реализовать данный интерфейс. Понятное дело, что при чтении txt-файлов будет возвращаться строка, а при чтении Access-файла DataTable.
Далее, я хотел бы это запихать в словарь, что бы ключом было расширение файла, а значением обработчик.
Так вот, это у меня сделать не получиться из-за разных возвращаемых типов...
Можно ли как-то элегантно решить задачу? Можно рефлексией проверять возвращаемый тип и делать приведение, но это попахивает большим свичем...
К сожалению, мне кажется, без свича точно определить возвращаемый тип нельзя.
Я не знаю, для каких целей вам нужна именно такая архитектура, но более-менее допустимыми решениями можно считать следующие:
IDataHandler
, который использует IDataExtractor
.Data
), а в классе Data
уже сохранять информацию о том, как надо работать с данными. Короче, придумать обобщённый интерфейс. Но и тут без перебора вариантов if
'ами или свичем не обойдётся.UPD: Совсем забыл, если вы планируете работать с этой структурой, заранее зная расширения файла, например вот так:
var textData = Extractors.Get(Extensions.TXT);
То советую пересмотреть Ваш вариант, возможно иная структура классов или иной метод получения нужного экстрактора подойдёт лучше. Вот например:
var extractor = new TextDataExtractor();
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть у меня некоторый обобщённый класс, который делает Request и отдаёт Response:
Как добавить namespace TestApp, TestAppController, TestApp
Есть веб приложение на PHP + БД на MySQLПосле выполнения какого-либо SQL запроса путем отправки данных через HTML форму, если обновить страницу, то SQL запрос...