2013-08-02 40 views
-1

我习惯于使用封装,无论如何,我的所有变量都是私有的。
但是,当我处理成千上万的实例的数千种性质的,我开始思考优化,如果封装的好处,证明性能损失(如果有的话)封装是否需要比公共变量更多的处理

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

+8

只有当您绝对需要时才进行微型优化。除非您真的能够看到并且能够评估需要解决的性能问题,否则更喜欢更灵活和易于支持的代码。 – David

+0

**在当今的计算能力时代,封装不会为您带来任何处理能力,无论如何。**无论如何,我的意思是说您不会失去足够的注意力。在你和你的数据访问(编译器,虚拟机,操作系统......)之间有很多优化级别,任何OS多任务打嗝都比你的封装更明显。 –

回答

4

我想你错过了封装点。封装的关键在于该对象控制与其字段的所有交互。从而统一执行业务逻辑并保护系统状态。鉴于您将不得不运行业务逻辑......您只需使用数据对象就不会保存任何内容。

+0

这就是我上面提到的,我提到我可能并不总是需要封装,所以我应该使用它,否则它会浪费处理?它使用多少处理?明白了我的观点? – AndrewxXx

+0

@AndrewxXx如果你不需要封装,那么你有一个贫血的系统,并可能在危险和不可测试的方式混合逻辑 – Mgetz

+2

@AndrewxXx阅读大卫的评论。除非你认为这是一个问题,否则你甚至不应该在意。 – Borgleader

1

你的第一选择应该是封装的东西。大多数情况下,setter和getter函数应该被内联。

所有你“失去”的是在实际验证中涉及的任何额外逻辑所花费的时间,你并没有设置一个无效值等等。但是你不想为了速度而错过它, 你会?

所以,如果选择是写

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

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

哪个更好?

如果有系统的性能标准,那么基准。如果你符合标准,那很好。如果没有,找出瓶颈在哪里。但除非你的setter和getter函数是“正常”的函数(也就是说,只是在检查后存储这个值),否则它不应该是瓶颈。典型的瓶颈是“算法选择差”。

相关问题