Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 对象是否应该具有基于业务逻辑的结果的属性?_Design Patterns_Oop - Fatal编程技术网

Design patterns 对象是否应该具有基于业务逻辑的结果的属性?

Design patterns 对象是否应该具有基于业务逻辑的结果的属性?,design-patterns,oop,Design Patterns,Oop,或者,当业务逻辑受到影响时,它们应该始终是一个函数吗 示例:Order.RequiresPayment 属性还是功能? 关于这是真是假,有商业规则 是否有一个模式可以确定这一点?当有疑问时,考虑代码的维护作为指南。 如果非常简单地确定了OrderRequiresPayment(例如,在创建订单时设置true,在收到付款时设置false),则可以使用属性 如果它是由一个公式决定的,或者如果它在许多地方被更新,那么最好将它封装在一个函数中。这是一个特定于语言的问题 例如,在Python中,业务规则可

或者,当业务逻辑受到影响时,它们应该始终是一个函数吗

示例:Order.RequiresPayment

属性还是功能? 关于这是真是假,有商业规则


是否有一个模式可以确定这一点?

当有疑问时,考虑代码的维护作为指南。

如果非常简单地确定了
OrderRequiresPayment
(例如,在创建订单时设置
true
,在收到付款时设置
false
),则可以使用属性


如果它是由一个公式决定的,或者如果它在许多地方被更新,那么最好将它封装在一个函数中。

这是一个特定于语言的问题

例如,在Python中,业务规则可以(而且通常是)两者兼而有之

基本上,它们是方法函数

但是,如果在阅读代码时眼睛更容易看到,Python允许它们显示为属性

注意

  • 业务规则通常是方法函数。有时它们是对象之间的关系。方法函数易于扩展和修改。当您需要添加特性并将特性更改为方法函数时,从特性开始是错误的

  • 属性最好用作语法糖,使方法函数看起来像属性,因为它使代码更简单或更易于阅读


  • 您通常可以通过将其视为业务属性或业务功能来决定是否更合理。抽象的层次不会改变你思考事物的方式。

    我同意亚当的观点。通常,属性将包含计数、长度等值。

    通常,属性不需要复杂的计算


    当函数(或方法)不能实现时,属性可以保证非常快。因此,一个经过计算或可能需要一些时间才能检索的值应该是一个方法,而一个立即准备好的值可以是一个属性。

    我最讨厌的是当访问属性导致对象状态发生变化时。属性应该揭示对象的现有状态,而函数可以用来改变对象的某些方面

    在访问属性时导致对象的状态发生更改会使调试变得非常困难—开发人员通常希望函数会导致某些事情发生,并且在使用调试器时,除非他们准备好获得结果,否则不会让函数运行。另一方面,大多数调试器将自动访问对象的公共属性,而不希望仅通过访问属性来更改对象的状态