常见情况:我有一个使用其他库的库。例如,一个使用numpy的数学库(我们称之为foo)。 FOO的暴露或隐藏依赖对象?
功能可以:
- 返回一个numpy的对象(无论是纯的或遗传的重新实现)
- 返回列表
- 返回一个Foo实现的对象行为类似numpy的(执行委托)
的三种解决方案,也可以重新表述为:
- foo通过内部使用的对象,清楚地说明它的库依赖性也是一个API依赖性(因为它返回的对象服从numpy库的接口)
- foo利用了部分对象的公共子集的语言基础。
- foo完全隐藏了它在内部使用的内容。底层库没有任何内容从foo库转义到客户端代码。
我们当然是在一个利弊情景。透明或不透明?与底层工具的强大耦合与否?我知道演习,但我正在做这个选择,我想在做出决定之前分享意见。建议,想法,个人经验,不胜感激。
+1:不浪费时间包装或隐藏任何东西。只要返回其他库的对象。 – 2009-09-15 00:57:59
S.洛特:我不知道。它看起来很有吸引力,但如果其他图书馆搞砸了怎么办?如果您稍后想要更好地改变它,该怎么办?如果你想腌制它,你不想腌制图书馆的物品,但你自己?根据我的经验,我很少看到图书馆返回其他图书馆的对象。图书馆倾向于全面包装下面的内容。 – 2009-09-15 01:03:08
如果其他磁带库拧紧,则将其暴露出来 - 您暴露了螺丝 - 使调试成为可能*。大多数Python库都建立在他们仅仅通过的其他库上。看看urllib2如何依赖于其他东西。你不能隐藏别人的“搞砸”。这是(a)不可能的,(b)仅仅在问题上分层问题。 – 2009-09-15 01:32:21