我习惯使用封装,无论如何,我的所有变量都是私有的 但是当我处理数千个具有数千个属性的实例时,我开始考虑优化,想知道封装的好处是否证明了性能损失(如果有的话)
我知道为什么要使用封装,但我要问的是:如果不需要使用封装,那么封装是否值得进行处理?它使用了多少?
答案 0 :(得分:4)
我认为你错过了封装的重点。封装的要点是对象控制与其字段的ALL交互。从而统一实施业务逻辑并保护系统状态。鉴于您无论如何都必须运行业务逻辑......您不会仅通过使用数据对象来保存任何内容。
答案 1 :(得分:1)
你的第一选择应该是封装东西。大多数情况下,setter和getter函数应该内联。
所有你“失去”的是实际验证中涉及的任何额外逻辑所花费的时间,你没有设置无效值等等。但是你不想为了速度而错过它,你会?
所以,如果替代方法是写
if (x >= 0) obj.x = x;
或 obj.setx(X); //其中setx检查x> = 0.
哪个更好?
如果系统有性能标准,那么基准测试。如果你符合标准,那很好。如果没有,找出瓶颈所在。但除非你的setter和getter函数是“正常”函数(也就是说,只是在检查后存储了值),否则它不应该成为瓶颈。典型的瓶颈是“算法选择不当”。