如果有人编写代码以使内部变量$ _fields可以在不使用getter / setter方法的情况下进行访问,那么是否有合适的术语来描述呢?
有礼貌的东西可以和管理一起使用:)
如果有人编写代码以使内部变量$ _fields可以在不使用getter / setter方法的情况下进行访问,那么是否有合适的术语来描述呢?
有礼貌的东西可以和管理一起使用:)
Answers:
在礼貌的社会中,公开私人成员绝不是一件好事。
这种做法是缺乏/不良封装。
private
)具有封装概念的另一种实现。
__
用于名称修饰)。其他语言也可能具有较差的封装,例如,Java中的反射和C ++中的指针运算以获取私有变量。Python只是没有使语法变得那么麻烦。
__
名称修饰。没有__
,它的设计仍然反映出良好的封装性。声称“公共”表示“缺乏/封装不良”是错误的。这个概念仍然存在。源代码缺乏适当的修饰。
它被称为“不遵循特定的编码标准”。
OP写道:
内部变量$ _fields无需使用getter / setter方法即可访问
这可能违反您的标准,并且(因此)可能是代码异味。但这不一定是封装不良。将内部变量(如“仅内部使用”)暴露给外部的getter和setter会更糟。
问题是:$_fields
外部世界应该可以访问吗?
如果是这样,我们有一种情况,您将添加getter / setter方法。这些方法不封装任何东西,而是封装$_fields
某种事实(与动态计算/获取/等相反)。根据语言的不同,您可能仍然会将类型(也称为实现细节)泄漏到外部。无论您是始终要使用吸气剂/设定器,还是仅在“需要”时才是编码标准问题。
如果$_fields
应该不被访问的话,好了,不对其进行访问。同样,是否应该阻止其他人在语言级别(私人和朋友)访问它(在某些情况下可能会简化调试),这再次成为编码标准问题。
封装问题与此完全正交。使用吸气剂和吸气剂绝对可以违反封装。插入起来甚至更容易,因为大多数人看到一堆吸气剂和吸气剂时,它们的警钟不会响起-这些代码似乎遵循最佳实践。与可能$_fields
没有被指定为的变量相比,代码很可能在内部实现细节上引入更多的依赖性private
。
我是一个坏比喻的拥护者:称呼不佳的封装就像将持枪的人称为凶手。
我称这类变量为公共成员变量。
如果您的setter / getter方法只不过是
void setfoo(bar){foo=bar;}
foo getfoo{return foo;}
那么只需要制作一个公共变量就可以节省一些区别很重要的情况。