Я пишу класс для инкапсуляции некоторых бизнес-правил, каждый из которых представлен логическим значением. Класс будет использоваться при обработке формы InfoPath, поэтому правила получат текущее состояние программы, просматривая значения в глобальной структуре данных XML, используя операции XPath. Какой лучший (самый идиоматический) способ разоблачить эти правила для вызывающих - свойства или общедоступные методы?
Вызов с использованием свойств
Rules rules = new Rules();
if ( rules.ProjectRequiresApproval ) {
// get approval
} else {
// skip approval
}
Вызов с использованием методов
Rules rules = new Rules();
if ( rules.ProjectRequiresApproval() ) {
// get approval
} else {
// skip approval
}
Правила, описывающие правила класса как свойства
public class Rules() {
private int _amount;
private int threshold = 100;
public Rules() {
_amount = someExpensiveXpathOperation;
}
// rule property
public bool ProjectRequiresApproval {
get { return _amount > threshold }
}
}
Правила размещения правил класса как методы
public class Rules() {
private int _amount;
private int threshold = 100;
public Rules() {
_amount = someExpensiveXpathOperation;
}
// rule method
public bool ProjectRequiresApproval() {
return _amount > threshold;
}
}
Каковы плюсы и минусы одного над другим?