conditions de base:tables DDD et Lookup
Il y a un modèle de vélo avec un certain nombre de paramètres fixes. En plus des paramètres du modèle d'origine, il devrait être possible d'ajouter manuellement de nouveaux paramètres de modèle.
Situation:
Chaque paramètre dans la base de données est représenté par les caractéristiques suivantes:
- Nom du paramètre
- Unités
- Valeur du paramètre
Il y a plusieurs Tables de recherche dans le base de données. Chacun de ces tableaux montre les unités de mesure disponibles.
Dans d'autres tableaux de référence, les noms des paramètres sont présentés.
Le nom du paramètre, sa valeur et ses unités de mesure doivent être affichés pour chaque modèle.
Questions:
La meilleure façon de mettre en œuvre une telle approche basée sur DDD? Je ne veux pas compliquer le modèle de domaine en faisant glisser l'approche utilisée dans la base de données, ce qui ne devrait pas du tout affecter le modèle.
Notes:
Dans un premier temps, avant de lire la base de données, je considère que les paramètres du modèle doivent être représentés par un ensemble de propriétés, par exemple:
// 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;
}
}
Cependant, après avoir pris connaissance moi-même avec la base de données, j'ai réalisé que la valeur "Paramètre" cache un certain nombre de caractéristiques présentées dans la section "Situation". Il s'avère que le paramètre peut être représenté par la classe 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;
}
}
Dans ce cas, le modèle de vélo prendra la forme suivante:
// 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);
}
}
Mais comment compiler un tel paramètre à l'aide des tables de consultation?
La question n'est pas claire pour moi. S'il s'agit de créer un modèle de domaine pour votre modèle de base de données existant, fournissez également un schéma de base de données. –
Création d'un modèle de domaine de domaine, j'ai tendance à abstraire au maximum de la base de données existante en utilisant le référentiel. Cependant, je ne comprends pas très bien comment vous pouvez faire abstraction de la base de données dans les conditions existantes. – Eladei