1) Свойства по определению не должны вызывать исключения. Ваш подход нарушает эту лучшую практику.
2) Исходный установщик вызывается, потому что NHibernate просто создает прокси, который вызывает базовый получатель / установщик.
Мы используем свойства, содержащие логику сериализации, для сопоставления сериализованных данных, которые иначе не будут работать.
Пример:
public virtual List<Foo> Foos {get;set;}
public virtual string SerializedFoos
{
get { return JsonConvert.Serialize(Foos); }
set { Foos = JsonConvert.Deserialize<List<Foo>>(value); }
}
Отображается только свойство SerializedFoos
, а код домена работает со свойствами Foos
. Поэтому NHibernate записывает хороший JSON в базу данных, в то время как домен может работать с удобным списком без потери производительности, потому что (де) сериализация происходит только тогда, когда объект загружен / сохранен.
3) Существует множество методов проверки, некоторые предпочитают атрибуты, некоторые предпочитают класс проверки для каждого объекта домена.
Я бы пошел с последним, потому что он наиболее гибкий, и вы не путаете свой объект данных, и вы можете легко проверить весь объект.
Одним из поисковых терминов для пути атрибута является «аннотации данных». Google поднял этот результат, например: http://stephenwalther.com/blog/archive/2008/09/10/asp-net-mvc-tip-43-use-data-annotation-validators.aspx
Если вы выполняете привязку данных, вы можете взглянуть на интерфейс IDataErrorInfo
.