Каков наилучший способ применения свойств, которые должны быть реализованы на каждом подклассе в * различных * полях? - PullRequest
3 голосов
/ 05 марта 2009

Я пытаюсь найти «лучший» способ реализации гибкой модели сущностей служб данных SQL , где каждый класс может храниться как сущность, даже классы с производными данными.

Пример: каждый подкласс имеет разные

string Id
string Kind
Dictionary<string, object> Properties

Пока что я иду в направлении наличия класса Entity (с вышеприведенным) и базового класса, который имеет некоторую коллекцию, такую ​​как

Dictionary<string, Entity> data

И пусть каждый подкласс добавляется в этот словарь и просто получает / устанавливает свойства, такие как

data["EntityKind"].Properties["PropertyName"]

Однако, поскольку у каждого класса есть только ОДНА сущность, кажется, что я должен использовать какой-то стек (intead of Dictionary), где каждый уровень иерархии точно знает, где он находится. Затем мне пришло в голову, что наследование классов - это стек, поэтому я подумал, что, может быть, мне просто не хватает какой-то огромной концепции ОО, которая действительно упростит все это. Что-то вроде

abstract eachsubclassmusthaveitsown Entity entity

1 Ответ

3 голосов
/ 05 марта 2009

Каждый класс является сущностью, и вы хотите связать с ней некоторые метаданные сущности?

Звучит как Атрибуты может быть вашим лучшим выстрелом.

Вы бы определили класс EntityAttribute, с членами для хранения метаданных, необходимых для описания сущности. Это позволит вам пометить классы сущностей с помощью [Entity]. Если все поля являются обязательными, присвойте классу атрибута один конструктор, который требует передачи значений.

Затем используйте отражение, чтобы обнаружить классы сущностей. Обратите внимание, что вам нужно выполнить этот процесс обнаружения только один раз, а затем кэшировать его, поэтому производительность отражения не должна быть проблемой.

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