【发布时间】:2024-04-23 05:30:02
【问题描述】:
在这种情况下,依赖注入(控制反转)是什么意思 (Google Mock):
让我们看一个例子。假设你正在开发一个图形 依赖于类似 LOGO 的 API 进行绘图的程序。你会如何测试 它做正确的事吗?好吧,您可以运行它并比较 带有金色屏幕快照的屏幕,但让我们承认这一点:测试如 这运行起来很昂贵而且很脆弱(如果你刚刚升级到 具有更好抗锯齿功能的闪亮新显卡?突然你 必须更新你所有的黄金图像。)。如果是的话就太痛苦了 你所有的测试都是这样的。幸运的是,您了解了 依赖注入并知道正确的做法:而不是拥有 您的应用程序直接与绘图 API 对话,将 API 包装在 接口(比如 Turtle)和该接口的代码:
class Turtle {
...
virtual ~Turtle() {}
virtual void PenUp() = 0;
virtual void PenDown() = 0;
virtual void Forward(int distance) = 0;
virtual void Turn(int degrees) = 0;
virtual void GoTo(int x, int y) = 0;
virtual int GetX() const = 0;
virtual int GetY() const = 0;
};
通过类在应用程序代码和绘图API之间添加另一层时与DI有什么关系?在许多关于依赖注入的 Java 示例中,通常不应在类中具体创建对象。相反,它应该在别处创建以分离两个对象之间的实现耦合。例如(来源codeproject):
解决方案:
当我在 * 上搜索有关 DI 的答案时,通常会在 Java 的上下文中询问它。一些示例使用了 Java GUI。通常这些例子是如此简单和如此明显,以至于我看不到它的意义,除了具有更好的设计和更少的耦合。但是,我想了解的是它背后的含义。正如wiki 中定义的那样,控制反转 (IoC) 意味着您反转代码的控制流。那么,它如何适用于 Google 案?与程序风格相比,实际流程如何反转?我以为代码是从上到下逐行顺序执行的,而不是从下到上?
【问题讨论】: