Val*_*Val 10 c# methods properties
我正在编写一个类来封装一些业务规则,每个规则都由一个布尔值表示.该类将用于处理InfoPath表单,因此规则通过使用XPath操作在全局XML数据结构中查找值来获取当前程序状态.将这些规则暴露给调用者 - 属性或公共方法的最佳(最惯用)方法是什么?
使用属性调用
Rules rules = new Rules();
if ( rules.ProjectRequiresApproval ) {
// get approval
} else {
// skip approval
}
Run Code Online (Sandbox Code Playgroud)
使用方法调用
Rules rules = new Rules();
if ( rules.ProjectRequiresApproval() ) {
// get approval
} else {
// skip approval
}
Run Code Online (Sandbox Code Playgroud)
规则类将规则公开为属性
public class Rules() {
private int _amount;
private int threshold = 100;
public Rules() {
_amount = someExpensiveXpathOperation;
}
// rule property
public bool ProjectRequiresApproval {
get { return _amount > threshold }
}
}
Run Code Online (Sandbox Code Playgroud)
规则类将规则暴露为方法
public class Rules() {
private int _amount;
private int threshold = 100;
public Rules() {
_amount = someExpensiveXpathOperation;
}
// rule method
public bool ProjectRequiresApproval() {
return _amount > threshold;
}
}
Run Code Online (Sandbox Code Playgroud)
一个人的优点和缺点是什么?
这一切都归结为向使用该业务逻辑的人传达语义。
属性是特定对象的内在价值。Rules
在您的示例中是一个业务逻辑引擎,因此它公开的任何属性都应应用于该引擎的状态和行为,而不是应用于它处理的数据。像这样,ProjectRequiresApproval()
是引擎应用于外部实体的操作。
另一方面,如果有Rules.GetProcess()
方法可以返回一个Process
对象,则RequiresAproval
可以是该对象的属性。