Полиморфные ассоциации в .NET

Как мне эффективно / действенно создавать полиморфные ассоциации в .NET?

При этом у меня есть несколько более подробных вопросов, которые я хотел бы видеть как часть более широкого ответа.

Технологии

  • .NET 4.0
  • ASP.NET MVC 3
  • MS SQL 2008
  • C # (последняя версия),
  • ADO.NET Entity Framework / LINQ-to-Entities

Контекст

Я разрабатываю ориентированное на потребителя приложение, состоящее из DAL, уровня бизнес-объектов, уровня брокера служб (для служб REST) ​​и, в конечном итоге, внешних интерфейсов для Интернета, планшетов, мобильных устройств и настольных компьютеров.

Это приложение включает сотни продуктов, которые соответствуют различным классификациям. Кроме того, продукты имеют различные атрибуты, которые также могут быть атрибутом их более широкой классификации.

Пример:

«Виджет A» и «Виджет B» красные, поэтому они могут быть сгруппированы в представлении в разделе «Вещи, которые красные». Однако «Виджет A» - это игрушечный автомобиль, а «Виджет B» - красный велосипед, поэтому , хотя оба они являются красными объектами , они являются объектами разных типов . Таким образом, они могут быть сгруппированы по-разному в других представлениях (например, «Велосипеды», которые будут отображать красные велосипеды, синие велосипеды и т. Д.).

Цель

Создать эффективный уровень ядра и обслуживания, который одновременно реагирует на вызывающего абонента и легко обслуживается.

Что я собираюсь сделать

Чтобы легко управлять всеми этими различными атрибутами и отношениями, я подумал о создании «глобальной» таблицы атрибутов, в которой атрибуты могут регистрироваться для объектов различных типов:

GLOBAL_ATTRIBUTES_TABLE

  1. ] ID (int)
  2. ObjectType (int) - Таблица FK для ObjectTypes, которая содержит список типов (например, велосипед, игрушечный автомобиль и т. Д.)
  3. ObjectId (int) - идентификатор объекта в его собственной таблице (например, «Таблица велосипедов»)
  4. AttributeType (int) - FK для таблицы AttributeTypes, которая содержит различные типы атрибутов (например, «Цвет», «Материал», «Возрастная группа») ).
  5. AttributeId (int) - идентификатор атрибута в его собственной таблице (например, «Таблица цветов»)

Итак, столбцы 3 и 5 ( ObjectId и AttributeId ) в идеале должен иметь внешний ключ динамический для таблицы, соответствующий их типам.

Я считаю, что это сделает поиск быстрым, построение модели простым и менее подробным (с точки зрения кода), добавление будущих атрибутов и типов объектов, более легким обслуживанием и т. Д.

Вопросы

  1. Это приемлемый или хороший метод для подражания (в отличие от создания, скажем, таблицы продуктов, таблицы серий и т. Д. Со списком столбцов длиной в милю)?

  2. Есть ли способ выполнить динамические / полиморфные внешние ключи ассоциации в .NET без простого запроса, построения модели с результатами, запроса этой модели и т. д.?

  3. Есть ли другие предложения по улучшению архитектуры данных?

6
задан casperOne 10 November 2011 в 21:00
поделиться