ベースライン条件:DDDとルックアップテーブル
固定パラメータの数のバイクモデルがあります。元のモデルパラメータに加えて、新しいモデルパラメータを手動で追加することが可能でなければなりません。
状況:データベース内の各パラメータは、以下の特性によって表される
:
- パラメータ名
- 単位
- パラメータ値
はいくつかあります。ルックアップテーブルデータベース。これらの各表は、使用可能な測定単位を示しています。
他の参照表では、パラメータの名前が表示されます。
パラメータの名前、その値、および測定単位がモデルごとに表示されます。
質問:
DDDに基づいて、このようなアプローチを実現するための最善の方法?私はデータベースに使われているアプローチをドラッグすることでドメインモデルを複雑にしたくはありません。モデルにはまったく影響を及ぼしません。
注意:慣れた、しかし
// Bike model
public class BikeModel {
public BikeModel(string name, double height, double width) {
ChangeName(name);
ChangeHeight(height);
ChangeWidth(width);
}
// Bike model name
public string Name { get; private set; }
// Bike height
public double Height { get; private set; }
// Bike width
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);
}
// Parameter name
public string Name { get; private set; }
// Parameter value
public T Value { get; private set; }
// Units of the parameter
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;
}
}
、バイクモデルは次の形式をとります:
// Bike model class
public class BikeModel {
public BikeModel(string name, double height, double width) {
ChangeName(name);
ChangeHeight(height);
ChangeWidth(width);
AdditionalNumericParams = new List<ParameterOfModel<double>>();
}
// Bike model name
public string Name { get; private set; }
// Bike height
public ParameterOfModel<double> Height { get; private set; }
// Bike width
public ParameterOfModel<double> Width { get; private set; }
// Additional numeric parameters
public List<ParameterOfModel<double>> AdditionalNumericParams { get; private set; }
public void ChangeName(string name) {
Name = name;
}
public void ChangeHeight(double height) {
Height = new ParameterOfModel<double>("Bike height", height, "Centimeters");
}
public void ChangeWidth(double width) {
Width = new ParameterOfModel<double>("Bike height", width, "Centimeters");
}
// Add an additional parameter to the model
public void AddNewNumericParam(ParameterOfModel<double> additionalParameter) {
AdditionalNumericParams.Add(additionalParameter);
}
}
しかし、どのようにルックアップテーブルを使用して、このようなパラメータをコンパイルするには?
質問は私にとっては明らかではありません。既存のDBモデルのドメインモデルを作成する方法については、DBスキームも提供してください。 –
ドメインドメインモデルを作成すると、リポジトリを使用して既存のデータベースから最大限に抽象化する傾向があります。しかし、私はあなたがどのように既存の条件の下でデータベースから抽象化することができるのかよく分かりません。 – Eladei