Я пишу класс для инкапсуляции некоторых бизнес-правил, каждое из которых представлено логическим значением. Класс будет использоваться при обработке формы 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;
}
}
Каковы плюсы и минусы одного над другим?