Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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
Oop 何时允许深度对象导航,何时避免?_Oop - Fatal编程技术网

Oop 何时允许深度对象导航,何时避免?

Oop 何时允许深度对象导航,何时避免?,oop,Oop,我想知道是否有任何最佳实践或规则可以帮助确定是否允许从对象根进行深度导航。到目前为止,我几乎总是倾向于隐藏所有的实现细节,但这可能有点过头了 深度导航的意思是httpResponse.status().text()而不是httpResponse.statusText(),因为httpResponse封装了HttpStatus对象 后者完全隐藏了实现细节,但也需要更多的代码。我理解该示例可能过于含蓄,除了防止出现null状态外,HttpResponse没有可强制执行的不变量,但这足以暴露问题 请注

我想知道是否有任何最佳实践或规则可以帮助确定是否允许从对象根进行深度导航。到目前为止,我几乎总是倾向于隐藏所有的实现细节,但这可能有点过头了

深度导航的意思是
httpResponse.status().text()
而不是
httpResponse.statusText()
,因为
httpResponse
封装了
HttpStatus
对象

后者完全隐藏了实现细节,但也需要更多的代码。我理解该示例可能过于含蓄,除了防止出现
null
状态外,
HttpResponse
没有可强制执行的不变量,但这足以暴露问题

请注意,我们可以考虑<代码> HtpStase作为示例不变。

这可能不是最好的示例,但我们也可以使用组合优于继承的任何示例。

在中,我们可以看到:

对象将其数据隐藏在抽象后面,并公开 对这些数据进行操作。数据结构公开了它们的数据,并且没有 有意义的功能


我认为这很好地回答了我的问题。在上面的示例中,我们可以安全地假设
httpResponse
是一个数据结构,因此没有理由隐藏它的结构细节。然而,如果它是一个有行为的物体,那么遵循原则通常更合适。

我的第一个问题就是,你为什么要这样做?@mituw16,做什么?整个http只是一个组合的例子。我明白,我不明白为什么在一个例子中要允许或不允许对象导航。在我看来,对任何对象进行编码的最佳方式都是以一种合乎逻辑且高效的方式对它们进行编码。这样想一想,如果必须键入
httpResponse.StatusText()
vs.
httpResponse.status().text()
,人们会得到什么好处?在这种情况下,我个人认为这样做太过分了,因为您必须编写更多代码来隐藏
.text()
方法。但那只是我的问题opinion@mituw16是的,这个例子可能太琐碎了。我所看到的唯一优势是公共
HttpStatus
API可以独立于
HttpResponse
的API进行更改。然而,我想我们已经违反了一些原则,首先允许类的公共接口更改。如果我们考虑什么时候使用组合而不是继承,或者什么时候一个类由许多成员组成,比如一辆
Car
有一个
Motor
和一个
GPS
等,我的问题就更有意义了。