У меня есть проблемный домен, в котором пользователь должен иметь возможность создавать объект «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; }
}
Это похоже на попытку применить структуру класса/объекта в объектах, где «Тип продукта» — это «класс», а «Продукт» — это «объект», который может быть экземпляром «Типы продуктов» и «наследовать» свойства и доступные значения от каждого из сопутствующие виды продукции.
Я никогда не занимался подобной объектной моделью, поэтому очень интересно, как это сделать правильно. Спасибо за любые идеи и предложения.