Общий метод в получении информации от родителей и воспитании ребенка? - PullRequest
0 голосов
/ 16 июля 2010

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

У меня есть родительский класс .NET Parent с общим методом Fetch (). Fetch может принимать различные параметры, чтобы помочь ему узнать, какие именно записи нужно извлечь, но в данный момент это не имеет значения.

Fetch () должен знать, какую таблицу искать, чтобы найти записи после нее. Таблица отличается для каждого дочернего класса, который наследует Parent. Я хотел бы сохранить имя таблицы в строке, которая является свойством класса Child. Затем каждый дочерний элемент может предоставить свое собственное имя таблицы, а родительский элемент может обработать выборку, которая одинаково работает для всех них.

После выполнения запроса Fetch () должен иметь DataReader. Все дочерние классы имеют конструктор, который может получать DataReader в качестве параметра и использовать его для создания своего экземпляра с атрибутами, заполненными читателем.

Я должен подчеркнуть одну вещь: Выборка - это общий метод. Если бы я проектировал его с нуля, я бы этого не сделал, но сейчас я рефакторинг кода какого-то абсолютного придурка (который мог быть или не быть мной 2 года назад), который пошел и создал несколько проектов, которые используют Fetch () в качестве общего метода для каждого дочернего класса (точнее, каждого класса, который я хочу сделать дочерним для этого нового Parent), и было бы неплохо не менять каждое вхождение в этих проектах в инстансы.

EDIT: В частности, я не могу понять, как получить имя таблицы в Fetch () или определить дочерний класс для вызова его конструктора в результирующем DataReader.

Итак, резюмируем:

  • Родитель имеет метод Shared Fetch ()
  • Метод вызывается как в Child.Fetch ()
  • Родитель получает информацию о таблице от Ребенка
  • Fetch () знает имя класса Child, поэтому он может вызывать конструктор с помощью DataReader, который он выбирает.

Можно ли это сделать? Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 16 июля 2010

Если Fetch знает полное имя дочернего класса, то он должен иметь возможность использовать отражение , чтобы узнать тип дочернего класса, и оттуда я ожидаю, что вы найдете его простым в плавании.

0 голосов
/ 16 июля 2010

Родитель может иметь свойство MustOverride, которое Child должен будет реализовать, которое может содержать информацию таблицы. Это решает проблему того, как Parent знает, какую таблицу искать для каждого дочернего элемента, но у вас не может быть общего элемента MustOverride, поэтому вам понадобятся экземпляры Child для работы в Parent.

Возможно, вы могли бы иметь универсальную функцию Fetch для parent, которая создавала экземпляры Child правильного типа на основе параметра типа. Это, конечно, возможно, учитывая правильные ограничения.

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