abstraction - 信息隐藏与隐藏的依赖关系

标签 abstraction information-hiding external-dependencies

在过程(或功能、模块等)设计中,有哪些常见的最佳实践来平衡对信息隐藏的需求和过程接口(interface)中适当的抽象级别与引入隐藏依赖项所固有的问题?

更具体地说,假设我编写了一个名为 getEmployeePhoneNbr(employeeId) 的过程。在内部,该过程是通过查询以employeeId 为键的数据库表来实现的。我想隐藏那些实现细节,但现在这个过程依赖于一个外部文件,如果环境发生变化,这会阻碍它的使用。

任何时候过程使用外部资源(文件、数据库等)时都会发生相同的情况。在过程中硬编码该资源的使用感觉是错误的,但我不确定替代方案是什么。

请注意,我不是在使用面向对象的语言。 在可能的范围内,我最感兴趣的是广泛适用于任何类型语言的响应。

谢谢,
马特

最佳答案

您遇到的这类问题通常可以使用 来解决。依赖倒置原理 (又名 DIP)。原文可见here .

这篇文章主要是面向对象的,但你也可以使用命令式语言(你可以用命令式语言做面向对象,只是更难)。

原则是,最好给客户端对象提供对执行某些必要处理(例如数据库访问)的对象的引用,而不是将此对象编码或聚合到客户端对象中。

在功能级别,您可以将其翻译为高级功能低级数据/功能。

非 OO 语言中最好的方法是传递一个结构或函数指针,该指针定义了更高级别函数使用的数据/函数。

关于abstraction - 信息隐藏与隐藏的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1256788/

相关文章:

c++ - 是否可以将具有外部依赖项的 C++ 项目/库配置为立即运行?

design-patterns - 命令模式似乎不必要地复杂(我无法理解什么?)

java - 降低静态方法的可见性

java - 可以使用接口(interface)来实现抽象吗

java - 从数据库中获取值的好方法

image - 如何在 jpg 或 gif 照片中隐藏信息?

java - 将外部类导出到 JAR - Eclipse

gradle 构建一个具有外部依赖关系的单个 Jar 作为其中的 Jar

javascript - 设计模式 : Should repetitive function calls, 到不同的模块,是否被移动到自己的 "abstraction"?

java - 代码多态性示例之间的区别