Я должен работать с большой базой данных, которая содержит цели измерения, а также области предупреждения / ошибки для значений измерения.
public class Measurement<T>
{
public T Target { get; set; }
public float? UpperWarnLimit { get; set; }
public float? LowerWarnLimit { get; set; }
public float? UpperErrorLimit { get; set; }
public float? LowerErrorLimit { get; set; }
}
Эти измерения относятся к спецификациям:
public class Specification
{
public long Id { get; set; }
public Measurement<float> Width { get; set; }
public Measurement<float> Height { get; set; }
public Measurement<int> AdditionalMeasurement { get; set; }
// ...
}
Таким образом, всякий раз, когда пользователь выполняет измерение, система собирает информацию из различных таблиц базы данных, собирает объект спецификации и собирает значения измерений. В некоторых случаях спецификация должна быть изменена:
public interface IDatabase
{
Specification GetSpecification(long id);
void UpdateSpecification(Specification specification)
}
Пока все выглядит хорошо, но есть также случай, когда пользователь должен сохранить результаты теста в базе данных, и я не уверен, как лучше всего решить эту проблему.
Первоначально я решил изменить класс измерений и базы данных следующим образом:
public class Measurement<T>
{
public T Target { get; set; }
public T Value { get; set; } // <-- New
public interface IDatabase
{
void StoreTestResults(Specification specification) // <-- New
Но это не так, потому что на самом деле пользователь сохраняет результат теста, а не спецификацию. Я ищу лучший способ сделать это.
Чтобы прояснить это: Я хочу отделить результаты испытаний от спецификации с наименьшим количеством дополнительной сложности.
Типичный сценарий кода с упомянутыми мною изменениями:
var s = GetSpecification(123);
s.Height.Value = 4;
if (s.Height.Value > s.Height.Target * s.Height.Target.UpperErrorLimit)
{
...
}
StoreTestResults(s);
Это просто и довольно просто, но нет четкого разделения между результатами испытаний и самой спецификацией.