DDD и справочные таблицы

384
07 сентября 2017, 15:41

Исходные условия:

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

Ситуация:

Каждый параметр в базе данных представлен следующими характеристиками:

  • Название параметра
  • Единицы измерения
  • Значение параметра

В базе данных существует несколько справочных таблиц (Lookup Table). В каждой из таких таблиц представлены доступные единицы измерения.

В других справочных таблицах представлены названия параметров.

На экран для каждой модели должно выводиться название параметра, его значение и единицы измерения.

Вопросы:

Как лучше реализовать подобный подход на основе DDD? Не хочу усложнять модель предметной области, перетаскивая в нее подход, используемый в Базе данных, которая вообще не должна влиять на модель.

Примечания:

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

    // Модель велосипеда
public class BikeModel {
    public BikeModel(string name, double height, double width) {
        ChangeName(name);
        ChangeHeight(height);
        ChangeWidth(width);
    }

    // Название модели велосипеда
    public string Name { get; private set; }
    // Длина велосипеда
    public double Height { get; private set; }
    // Ширина велосипеда
    public double Width { get; private }

    public void ChangeName(string name) {
        Name = name;
    }
    public void ChangeHeight(double height) {
        Height = height;
    }
    public void ChangeWidth(double width) {
        Width = width;
    }
}    

Однако ознакомившись с базой данных я понял, что под значением "Параметр" скрывается ряд характеристик, представленных в разделе "Ситуация". Получается, что параметр можно представить Generic-классом.

public class ParameterOfModel<T> {
    public ParameterOfModel(string name, T value, string units) {
        SetName(name);
        SetValue(value);
        SetUnits(units);
    }
    // Название параметра
    public string Name { get; private set; }
    // Значение параметра
    public T Value { get; private set; }
    // Единицы измерения параметра
    public string Units { get; private set; }

    public void SetName(string name) {
        Name = name;
    }
    public void SetValue(T value) {
        Value = value;
    }
    public void SetUnits(string units) {
        Units = units;
    }
}

В таком случае модель велосипеда примет следующий вид:

    // Модель велосипеда
public class BikeModel {
    public BikeModel(string name, double height, double width) {
        ChangeName(name);
        ChangeHeight(height);
        ChangeWidth(width);
        AdditionalNumericParams = new List<ParameterOfModel<double>>();
    }

    // Название модели велосипеда
    public string Name { get; private set; }
    // Длина велосипеда
    public ParameterOfModel<double> Height { get; private set; }
    // Ширина велосипеда
    public ParameterOfModel<double> Width { get; private set; }
    // Дополнительные числовые параметры
    public List<ParameterOfModel<double>> AdditionalNumericParams { get; private set; }

    public void ChangeName(string name) {
        Name = name;
    }
    public void ChangeHeight(double height) {
        Height = new ParameterOfModel<double>("Высота велосипеда", height, "Сантиметры");
    }
    public void ChangeWidth(double width) {
        Width = new ParameterOfModel<double>("Ширина велосипеда", width, "Сантиметры");
    }
    // Добавить в модель дополнительный параметр
    public void AddNewNumericParam(ParameterOfModel<double> additionalParameter) {
        AdditionalNumericParams.Add(additionalParameter);
    }
}

Но как собирать такой параметр, используя справочные таблицы?

READ ALSO
ASP.NET CORE, не мигрируется база

ASP.NET CORE, не мигрируется база

Доброе время суток,есть проект, взятый он с офсайта :

335
Как сериализовать Dictionary&lt;string, object&gt;?

Как сериализовать Dictionary<string, object>?

Имеется многоуровневый словарь Dictionary<string, object>, где значением опять-же может быть многоуровневый словарь Dictionary<string, object>Каким образом...

256