Наследование интерфейсов в C #

Я пытаюсь решить довольно большую (для меня) проблему, с которой я столкнулся при написании своего приложения. Посмотрите на это, пожалуйста (я постараюсь сократить код для простоты):

У меня есть корневой интерфейс с именем IRepository . Далее, IBookRepository: IRepository Затем конкретный класс, который его реализует: BookRepository: IBookRepository

В классе RepositoryManager я объявил частный IRepository currentRepo;

IRepoItem - это интерфейс, который реализуется классом Book.

Теперь, когда я пытаюсь сделать что-то вроде этого:

currentRepo = new BookRepository();

VisualStudio выдает сообщение об ошибке:

Невозможно неявно преобразовать тип BookRepository в IRepository. Существует явное преобразование (не хватает ли вам преобразования?)

Я попытался выполнить преобразование явно, но возникло исключение во время выполнения ...

Я знаю (почти наверняка), что это нечто, называемое ковариацией, и это (вероятно, ) решена в .Net 4.0. К сожалению, я использую фреймворк версии 3.5 и не могу это изменить. Пожалуйста, дайте мне несколько советов, что делать - как решить эту проблему? Я хотел бы получить currentRepo от RepoFactory, который будет создавать несколько видов репозиториев в зависимости от потребностей пользователя. Не знаю, разрешены ли здесь ссылки, но я веду какой-то блог на http://olgatherer.wordpress.com/ , где описываю создание приложений. Мой английский не очень хорош, но я надеюсь, что этого достаточно, чтобы меня понять. Заранее благодарю за ответ.

С уважением, Соединения обходятся дорого.

Часто рекомендуют никогда не запускать эти запросы из своей транзакционной модели БД, вместо этого следует использовать денормализованную плоскую модель, адаптированную для определенных представлений пользовательского интерфейса или отчетов, что устраняет необходимость во многих соединениях . Дублирование данных не является проблемой в этом сценарии.

Эта концепция имеет смысл, но то, что я редко вижу, когда эксперты делают такие заявления, - это именно КАК это реализовать. Например (и, откровенно говоря, я был бы признателен за пример с использованием любой платформы) в системе среднего размера, работающей на внутреннем сервере sql, у вас есть нормализованная транзакционная модель. У вас также есть несколько отчетов и веб-сайт, требующий запросов. Итак, вы создаете базу данных «отчетов», которая выравнивает нормализованные данные. Как вы это синхронизируете? Доставка журнала транзакций? Если так, как преобразовать данные, чтобы они соответствовали модели отчетности?

8
задан Saraz 6 October 2010 в 13:33
поделиться