黑盒与白盒重用

时间:2020-03-06 14:24:26  来源:igfitidea点击:

使用黑盒重用而不是白盒重用的优点/缺点是什么?

解决方案

白盒:

优点:

  • 简单(非常自然的概念)
  • 你对事情有更多的控制权

缺点:

  • 需要有关组件内部的内在知识
  • 可能难以实现(OO继承约束),有时会导致损坏\错误的继承链

黑盒子:

优点:

  • 低耦合(提供后期绑定和其他好处)

缺点:

  • 不明显(代码很难理解)
  • 接口比类更脆弱(即接口vs继承)

我不确定这些特定术语的含义,因此在继续之前,我将先确定它们的含义:

  • 黑盒重用使用的是在其他项目中未修改的类/函数/代码
  • 白盒重用是从一个项目中获取类/功能/代码,并对其进行修改以适合另一个项目的需求。

黑盒重用的优点是,一旦编写,调试和测试了代码,就可以在不同情况下无数次重用它。不利之处在于,真正可重复使用的黑盒代码很少见,需要花费时间和精力来格式化API和调用代码,并使之与黑盒方法保持一致(不会泄漏上下文)。

白盒重用的优点是,我们确实可以多次使用代码,而不必首先从原始项目中解脱出来。我们只需复制和修改就可以了。这种重用类型更为常见,但也有一些缺点。通常,如果在一个实现中发现错误,则需要检查以确保在所有其他实现中均已修复该错误。如果它们之间经常发生很大的分歧,这可能会很困难。

@Kyle,

黑盒重用意味着我们在不了解组件内部的情况下使用组件。我们所拥有的只是一个组件接口。

白盒重用意味着我们知道如何实现组件。通常,白盒重用意味着类继承。

以我的经验,白盒重用通常是通过继承完成的,黑盒是通过合成完成的。

优点:我们可以自定义模块以适合特定情况,这可以在更多情况下重用
缺点:我们现在拥有定制的结果,因此会增加代码的复杂性。

优点:简洁明了
缺点:很多时候只是不可能

裁定:

我会尽可能选择"黑匣子"。