基線條件: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);
}
}
但如何編譯使用查找表這樣的參數?
這個問題對我來說並不明確。如果是關於如何爲現有的數據庫模型創建領域模型,那麼還需要提供數據庫方案。 –
創建域域模型時,我傾向於使用存儲庫從現有數據庫最大化抽象。但是,我不太瞭解在現有條件下如何從數據庫中抽象出來。 – Eladei