Хранение атрибутов продуктов разных типов в совокупности продуктов.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Хранение атрибутов продуктов разных типов в совокупности продуктов.

Сообщение Anonymous »

Я использую шаблон EAV (Entity-Attribute-Value) в системе управления запасами, которую разрабатываю.
Он очень похож на типичную структуру интернет-магазина, такую ​​как Magento.
Атрибуты имеют тип данных, например числовой, varchar, текст.
Определения атрибутов хранятся в одной таблице, например eav_attributes. Значения хранятся в отдельных таблицах, специфичных для типа данных.
Скажем, продукту присвоен числовой атрибут. Таблица базы данных, которая содержит связь между атрибутом, продуктом и значением, представляет собой таблицу типа eav_decimal_attribute_values.
Пример схемы таблицы:

Код: Выделить всё

attribute_id | product_id | attribute_value (decimal)
И тот же принцип для атрибута varchar:

Код: Выделить всё

attribute_id | product_id | attribute_value (varchar(255))
При загрузке продукта из базы данных я загружаю отношения продукт -> атрибут -> значение каждой из этих таблиц.
Поэтому я запросите таблицу eav_decimal_attribute_values, чтобы получить все назначенные десятичные атрибуты и их значения для продукта (или получите пустой набор результатов или курс).
И то же самое для других типов атрибутов (eav_varchar_attribute_values , eav_text_attribute_values, ...).
Пока это фактически то же самое, что, например, Magento справляется с этой задачей.
Поскольку я использую типизированный язык, я выбрал следующий дизайн:

Код: Выделить всё

class AttributeDefinition
- string attributeName
- string attributeDescription
- enum dataType // Like 'numeric', 'varchar', 'text', ...
- ...
- ...

abstract class ProductAttributeAssignment
- AttributeDefinition attribute

class DecimalProductAttribute : ProductAttributeAssignment
- double value
- ...

class VarcharProductAttribute : ProductAttributeAssignment
- string value
- ...

class TextProductAttribute : ProductAttributeAssignment
- string value
- ...

Product
- name
- ...
- attributes
// Problematic part: storing different types together
- A TextProductAttribute
- Another TextProductAttribute
- A DecimalProductAttribute
- A VarcharProductAttribute
- ...
В коде я хочу сохранить типы. Подобно тому, как значение числового атрибута хранится в коде как двойное или десятичное значение. Атрибут varchar или text помещается в строку.
Конечно, я мог бы просто создать один конкретный класс ProductAttributeAssignment и всегда хранить значение как строка в памяти, независимо от типа данных, который представляет атрибут. Но представьте, что мне нужно выполнять вычисления с числовыми атрибутами или выполнять поиск по таким функциям, как Длина зарядного кабеля > 120, было бы полезно сохранить типы. Кроме того, когда появятся функции, например, разработчики смогут создавать плагины или хуки.
Проблема в том, что у меня возникают некоторые трудности с кодированием совокупности продуктов. Было бы логично хранить назначения атрибутов продуктов только в объекте Product. Но поскольку для каждого типа атрибута существует свой класс, я не могу просто написать класс типа Product с полем List атрибуты.
Итак, мой вопрос не о хранении вещей в базе данных/постоянном слое, а о написании кода для бизнес-объекта, который владеет вещами, которые на самом деле являются «одной и той же бизнес-вещью», но технически разными типами кода.

Подробнее здесь: https://stackoverflow.com/questions/785 ... -aggregate
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Хранение контейнера обратных вызовов для разных типов вызывающих абонентов без полиморфизма или функции STD
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Хранение контейнера обратных вызовов для разных типов вызывающих абонентов без полиморфизма или функции STD
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Обработка нулевого поля в совокупности с использованием linq
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Интеграция API обмена сообщениями в совокупности
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Фильтрация выбранных столбцов на основе совокупности столбцов
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»