-1

无论如何,我习惯于使用封装,我所有的变量都是私有的。
但是当我处理具有数千个属性的数千个实例时,我开始考虑优化,想知道封装的好处是否可以证明性能损失(如果有的话)

我知道为什么应该使用封装,但我要问的是:如果不需要使用封装,是否值得进行所需的处理?它用了多少?

4

2 回答 2

4

我认为你错过了封装的重点。封装的重点是对象控制与其字段的所有交互。从而统一执行业务逻辑并保护系统状态。鉴于无论如何您都必须运行业务逻辑......您不会通过仅使用数据对象来保存任何内容。

于 2013-08-02T22:01:29.947 回答
1

您的第一选择应该是封装事物。大多数时候,setter 和 getter 函数应该被内联。

您“失去”的只是实际验证中涉及的任何额外逻辑所花费的时间,即您没有设置无效值等。但是您不想仅仅为了速度而错过这一点,对吗?

所以,如果替代方案是写

if (x >= 0) obj.x = x; 

或 obj.setx(x); // 其中 setx 检查 x >= 0。

哪个更好?

如果系统有性能标准,则进行基准测试。如果你符合标准,那很好。如果没有,请找出瓶颈在哪里。但是,除非您的 setter 和 getter 函数是“正常”的(即,只是在一些检查后存储值),否则它不应该成为瓶颈。典型的瓶颈是“算法选择不当”。

于 2013-08-02T22:06:53.750 回答