使用属性或方法在C#中公开业务规则?
发布时间:2020-12-15 17:41:32 所属栏目:百科 来源:网络整理
导读:我正在编写一个类来封装一些业务规则,每个业务规则都由布尔值表示.该类将用于处理InfoPath表单,因此规则通过使用XPath操作在全局 XML数据结构中查找值来获取当前的程序状态.什么是最好的(最惯用的)方式来暴露这些规则给呼叫者 – 属性或公共方法? 使用属性
我正在编写一个类来封装一些业务规则,每个业务规则都由布尔值表示.该类将用于处理InfoPath表单,因此规则通过使用XPath操作在全局
XML数据结构中查找值来获取当前的程序状态.什么是最好的(最惯用的)方式来暴露这些规则给呼叫者 – 属性或公共方法?
使用属性调用 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; } } 一个人的利弊是什么? 解决方法
所有这些都归结为向消费这种业务逻辑的人传达语义.
属性是特定对象的内在值.您的示例中的规则是业务逻辑引擎,因此其公开的任何属性都应适用于该引擎的状态和行为,而不是应用于由其处理的数据.因此,ProjectRequiresApproval()是引擎应用于外部实体的操作. 如果另一方面有Rules.GetProcess()方法,那将返回一个Process对象,RequiresAproval可以是该对象上的属性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |