Я бы сделал проверку на основе атрибутов:
public class Entity
{
[Required, MaxStringLength(50)]
public string Property1 { get; set; }
[Between(5, 20)]
public int Property2 { get; set; }
[ValidateAlways, Between(0, 5)]
public int SomeOtherProperty { get; set; }
[Requires("Property1, Property2")]
public void OperationX()
{
}
}
Каждое свойство, которое передается атрибуту Requires
, должно быть допустимым для выполнения операции.
Свойства, имеющие атрибут ValidateAlways
, должны быть действительными всегда - независимо от того, какая операция.
В моем псевдокоде Property1
, Property2
и SomeOtherProperty
должны быть действительными для выполнения OperationX
.
Конечно, вы должны добавитьОпция атрибута Require для проверки атрибутов проверки также для дочернего элемента.Но я не могу предложить, как это сделать, не увидев пример кода.
Может быть что-то вроде этого:
[Requires("Property1, Property2, Child2: Property3")]
При необходимости вы можете также получить строго типизированные указатели свойств с лямбда-выражениями вместо строк ( Пример ).