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