Design patterns 对象是否应该具有基于业务逻辑的结果的属性?
或者,当业务逻辑受到影响时,它们应该始终是一个函数吗 示例:Order.RequiresPayment 属性还是功能? 关于这是真是假,有商业规则Design patterns 对象是否应该具有基于业务逻辑的结果的属性?,design-patterns,oop,Design Patterns,Oop,或者,当业务逻辑受到影响时,它们应该始终是一个函数吗 示例:Order.RequiresPayment 属性还是功能? 关于这是真是假,有商业规则 是否有一个模式可以确定这一点?当有疑问时,考虑代码的维护作为指南。 如果非常简单地确定了OrderRequiresPayment(例如,在创建订单时设置true,在收到付款时设置false),则可以使用属性 如果它是由一个公式决定的,或者如果它在许多地方被更新,那么最好将它封装在一个函数中。这是一个特定于语言的问题 例如,在Python中,业务规则可
是否有一个模式可以确定这一点?
当有疑问时,考虑代码的维护作为指南。
如果非常简单地确定了OrderRequiresPayment
(例如,在创建订单时设置true
,在收到付款时设置false
),则可以使用属性
如果它是由一个公式决定的,或者如果它在许多地方被更新,那么最好将它封装在一个函数中。这是一个特定于语言的问题 例如,在Python中,业务规则可以(而且通常是)两者兼而有之 基本上,它们是方法函数 但是,如果在阅读代码时眼睛更容易看到,Python允许它们显示为属性 注意
您通常可以通过将其视为业务属性或业务功能来决定是否更合理。抽象的层次不会改变你思考事物的方式。我同意亚当的观点。通常,属性将包含计数、长度等值。通常,属性不需要复杂的计算
当函数(或方法)不能实现时,属性可以保证非常快。因此,一个经过计算或可能需要一些时间才能检索的值应该是一个方法,而一个立即准备好的值可以是一个属性。我最讨厌的是当访问属性导致对象状态发生变化时。属性应该揭示对象的现有状态,而函数可以用来改变对象的某些方面 在访问属性时导致对象的状态发生更改会使调试变得非常困难—开发人员通常希望函数会导致某些事情发生,并且在使用调试器时,除非他们准备好获得结果,否则不会让函数运行。另一方面,大多数调试器将自动访问对象的公共属性,而不希望仅通过访问属性来更改对象的状态