Мы написали веб-службу, которая использует простой транслятор объекта для сопоставления значений DTO на «реальных» бизнес-объектах на стороне сервера. Как часть этого упражнения. Мы столкнулись с «интересным» различием между явно установленными нулевыми значениями и клиентами, имеющими не установлено значение.Null vs Значение не установлено
Проблема заключается в том, что мы хотим установить значение по умолчанию для реального бизнес-объекта , если клиент явно не установил значение, однако с использованием стандартных типов с нулевым значением не существует способа определить, явно ли подразумевается клиент «установите это на нуль» или просто не устанавливайте его.
Решение здесь, очевидно, своего рода «флаг».
Внутри бизнес-объекта мы можем отслеживать состояние поля с использованием частных флагов IsDirty, установленных в установщиках свойств, но DTO действительно определяет интерфейс, поэтому это означает публикацию этих данных для общественности. Это оставляет ряд вариантов реализации. Язык C# (поэтому статически типизирован), поэтому ...
- Мы можем выставить флаг «IsSet» на каждом свойстве?
- Мы можем предоставить каждому свойству класс, обладающий свойством .Value и .IsSet? и т.д. и т.п.
Как бы вы решили выставить эти «флаги» по Договору данных? Что вы здесь считаете лучшей практикой для этого?
Любые мнения об этом были бы весьма признательны.