Я пытаюсь заполнить продукты значениями, проанализированными с веб-сайта. Процесс идет хорошо. Я хочу, чтобы простой способ (с уменьшенной связью) легко заполнить значения в продуктах. На данный момент способ добавления значения выглядит так: productX.Attributes[Price].SetValueFromString("95,3€");
. Пожалуйста, см. Дизайн ниже и помогите мне улучшить его.Какой шаблон дизайна использовать в этом механизме синтаксического анализа?
class Product
{
Dictionary<KeyValuePair<Type, AAtribute>> _attributes;
Product()
{
// add values to _attributes. for example
// Name with StrinAttribute
// Price with NumericAttribute
// Images with StringListAttribute
}
}
enum Type
{
Name,
Price,
Images
...
}
abtract class AAtribute
{
abstract void SetValueFromString(string value);
}
и есть несколько классов, которые вытекают из AAtribute:
StringAtribute
,StringListAtribute
,KeyValueStringListAtribute
,BoolAtribute
NumericAtribute
Я сделал этот проект, поэтому другим классам не нужно знать, что атрибут ведьмы относится к какому типу и как давать значения им. Если, например, я хочу, чтобы дать значение для атрибута цены, я бы сказал:
productX.Attributes[Price].SetValueFromString("95,3€");
Это действительно помогло, так как есть более 40 атрибутов. Было бы больно анализировать значение для каждого из них вручную.
Моя проблема заключается в том, что я не уменьшу еще больше сцепления. Любые идеи о том, как заставить другие классы не знать AAtributes или типы продуктов? Что-то между дизайнером и шаблоном стратегии должно делать, но я не могу найти пути к нему.
Проблема, которая заставляет меня задавать этот вопрос: - Как добавить значения в ListStringAttribute
?
Но это поднимает проблему и знает, что я чувствую, что есть необходимость в рефакторинге.