Наследование в C #: выбор репозитория в зависимости от типа унаследованного класса - PullRequest
0 голосов
/ 24 апреля 2010

Я делаю программу, которая загружает информацию о фильмах из интернета.У меня есть базовый класс Title, который представляет все названия.Movie, Serie и Episode унаследованы от этого класса.

Для сохранения их в базе данных у меня есть 2 службы, MovieService и SerieService.Они, в свою очередь, вызывают репозитории, но это здесь не важно.

У меня есть метод Save(Title title), который меня не очень устраивает.Я проверяю, к какому типу относится название, и затем вызываю правильный сервис.Возможно, я хотел бы написать так:

ITitleService service = title.GetService();
title.GetSavedBy(service);

Итак, у меня есть абстрактный метод для Title, который возвращает ITitleSaver, который вернет правильный сервис для экземпляра.Чтобы сделать это, службы должны были бы реализовать ITitleSaver

Мой вопрос: как мне реализовать ITitleSaver?Если я заставлю его принять Title, мне придется привести его к правильному типу перед вызовом правильной перегрузки.Что приведет к тому, что вам придется снова иметь дело с кастингом.

Каков наилучший подход к решению этой проблемы?Я хотел бы иметь логику сохранения в соответствующем классе.

1 Ответ

0 голосов
/ 24 апреля 2010

Я не понимаю цели GetService. Вы вызываете этот метод только для передачи его результата в метод GetSavedBy? Вот мое предложение:

  1. Предоставление абстрактного свойства Saver в классе Title
  2. Определить конкретный метод Сохранить в классе Title, реализация которого:

    this.GetSavedBy (экономайзер);

  3. В каждом конкретном классе либо создайте требуемый хранитель, либо используйте какой-нибудь инструмент внедрения зависимостей, чтобы внедрить правильный хранитель во время выполнения.

Вуаля! это решит вашу проблему аккуратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...