Я пишу проект VB.NET Winforms на основе MVVM (с использованием привязки Winforms). Мой инстинкт - никогда не позволять объекту домена находиться в недопустимом состоянии. Это требует, чтобы я проверил валидацию в конструкторе для новых сущностей и в каждом установщике для существующих сущностей:
Public Class Product
Public Sub New(ProductID as Integer, Name as String)
If ProductID > 0 AndAlso Name.Length > 5 Then
_ProductID = ProductID
_Name = Name
Else
Throw New InvalidProductException
End If
End Sub
Private _ProductID as Integer
Public Property ProductID as Integer
Set(value as String)
If value > 0 then
_ProductID = value
Else
Throw New InvalidProductException
End If
End Set
End Property
'Same principle as above for Name setter.
End Class
Затем я наткнулся на аннотации данных, которые показались мне довольно удобными. Я заметил, что большинство людей, использующих аннотации данных, позволяют объекту домена временно становиться недействительным, а затем проверяют объект позже с помощью вызова Validate.ValidateObject. К этому моменту объект недействителен, и исходное состояние потеряно, если у вас нет другого механизма для его отката.
Два вопроса:
1) Разрешаете ли вы объектам домена стать временно недействительными?
2 ) Основываясь на вашем ответе на первый вопрос, какие методы вы используете для проверки сущности?