gpt4 book ai didi

c# - 在 C# 中使用属性或方法公开业务规则?

转载 作者:可可西里 更新时间:2023-11-01 09:08:35 25 4
gpt4 key购买 nike

我正在编写一个类来封装一些业务规则,每个规则都由一个 bool 值表示。该类将用于处理 InfoPath 表单,因此规则通过使用 XPath 操作在全局 XML 数据结构中查找值来获取当前程序状态。向调用者公开这些规则的最佳(最惯用)方式是什么——属性还是公共(public)方法?

使用属性调用

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;
}
}

两者的优缺点是什么?

最佳答案

这一切都归结为向使用该业务逻辑的任何人传达语义。

属性是特定对象的内在值。 Rules 在你的例子中是一个业务逻辑引擎,所以它公开的任何属性都应该适用于该引擎的状态和行为,而不是它处理的数据。因此,ProjectRequiresApproval() 是引擎应用于外部实体的操作。

另一方面,如果有 Rules.GetProcess() 方法,它将返回一个 Process 对象,RequiresAproval 可以是属性在那个物体上。

关于c# - 在 C# 中使用属性或方法公开业务规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2426384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com