Справка по моделированию предметной области: Product & ProductType & ProductyTypeProperties & ProductyTypePropertyValues

У меня есть проблемный домен, в котором пользователь должен иметь возможность создавать объект «ProductType», где каждый объект ProductType должен иметь список агрегированных «ProductTypeProperties», а каждый объект ProductTypeProperty должен иметь список «ProductTypePropertyValues».

После этого пользователь может создать объект «Продукт» и связать с ним несколько типов продуктов.

Когда пользователь связывает Product с несколькими ProductTypes, пользователь может указать значения ProductTypeProperties для объекта Product.

ProductTypeProperties могут иметь значения, принадлежащие разным режимам выбора, например: «один выбор», «множественный выбор» и «строка/целое число/десятичный ввод».

Я не уверен, как разработать такую ​​объектную модель предметной области. Особенно, как применить значения свойств ProductType к объекту Product.

В настоящее время я не возражаю против постоянства, только в отношении модели предметной области, поскольку я могу свободно выбирать базу данных SQL/Document/Object/Graph.

Теперь структура объекта выглядит так:

ProductType
    List<ProductTypeProperty>
        List<ProductTypePropertyValue>

Product
    List<ProductType>

Определение классов С#, которое я сейчас использую, это:

public class Product {
    public string Name { get; set; }
    public List<ProductType> AssociatedProductTypes { get; set; }
    // how to apply ProductType's property values to a Product object?
}

public class ProductType {
    public string Name { get; set; }
    public List<ProductTypeProperty> AggregatedProperties { get; set; }
}

public class ProductTypeProperty {
    public string Name { get; set; }
    public List<ProductTypePropertyValue> AggregatedAvailableValues { get; set; }
}

public class ProductTypePropertyValue {
    public string Name { get; set; }
}

Это похоже на попытку применить структуру класса/объекта в объектах, где «Тип продукта» — это «класс», а «Продукт» — это «объект», который может быть экземпляром «Типы продуктов» и «наследовать» свойства и доступные значения от каждого из сопутствующие виды продукции.

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


person Zelid    schedule 01.07.2011    source источник
comment
Кажется, у вас уже есть модель объектов, которая правильно отражает искомую структуру (товары с несколькими типами продуктов, типы продуктов с несколькими свойствами, свойства с несколькими возможными значениями). Если уже смоделировали, в чем вопрос?   -  person Mr.Eddart    schedule 04.07.2011


Ответы (1)


Вы можете сопоставить ProductTypeProperty следующим образом:

Общий базовый класс свойств, где TValue будет определять тип значения свойства (может быть строковым, десятичным, целым или множественным выбором):

    public abstract class ProductTypePropertyBase<TValue>
    {
        public string Name { get; set; }
        public TValue Value { get; set; }

        protected ProductTypePropertyBase(string name, TValue value)
        {
            Name = name;
            Value = value;
        }
    }

для каждого типа свойства создайте вложенный класс, например, для простого строкового свойства вы можете создать:

public class ProductTypeStringProperty : ProductTypePropertyBase<string>
{
    public ProductTypeStringProperty(string name, string value) : base(name, value)
    {
    }
}

для сложного типа свойства, такого как несколько вариантов, которые вы можете реализовать:

public class ProductTypeMultipleChoiceProperty : ProductTypePropertyBase<MultipleChoiceValue>
{
    public ProductTypeMultipleChoiceProperty(string name, MultipleChoiceValue value) : base(name, value)
    {
    }
}

где MultipleChoiceValue — это другой тип, представляющий, например, список строк.

person Mohamed Abed    schedule 29.08.2011