问题标签 [coupling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
33 浏览

separation-of-concerns - “耦合”是否仅与代码相关,或者该术语可以应用于软件组件和架构?

例如,在讨论构建或部署过程时,要确保它独立于 IDE。这是“耦合”,还是被认为是关注点分离,还是完全不同的东西?一般概念是在流程或架构中引入最少数量的变量,以便在发生故障时,显着降低识别可能故障点的难度。有其他定义吗?

0 投票
1 回答
596 浏览

c++ - 管理模块类的最佳选择

我的游戏库由一系列模块组成,按类组织,在需要时创建、更新和交互。

一些示例可能是:CWindowManagerCGraphicsManagerCPhysicsManager等。

我很惭愧不得不说我目前对它们使用全局指针(extern CWindowManager* g_WindowManager;),而且我知道这可能是一件坏事。

无论如何,问题是这些模块需要动态地创建和删除,当然是按照正确的顺序。还有一个问题是,像这样CPhysicsManager的模块依赖于场景,因此在切换场景时它们会被删除,然后重新创建。

现在,我想放弃使用全局变量来处理我的游戏中的模块。

我不害怕重构,但我真的想不出什么是全局变量的最佳替代方案。

我考虑过创建一个 CModuleManager 类并将模块的实例存储在其中作为成员,然后从 CModule 基类派生。虽然我无法真正想到这将如何详细工作。

这似乎是软件开发,尤其是游戏开发中的一个常见问题,所以:

- 与简单地使用全局指针相比,管理模块的最佳选择是什么?

0 投票
2 回答
2424 浏览

coupling - 凝聚力VS。耦合

这个问题将软件视为一棵树,其中:

  • 树中的每个节点代表一些代码单元(例如类\方法\行等)
  • 如果在源代码中 X 设置在 Y 中,则节点 X 是节点 Y 的儿子

这里是术语 T 的定义:

相对于节点 X 的 T 是 X 上的任何更改将导致 X 的子树内的节点发生更改的概率。

T这个词是什么?内聚还是耦合?

0 投票
2 回答
41 浏览

database - 什么时候可以模糊数据和逻辑之间的抽象?

我的意思是通过 ID、代码或在数据库中指定类名来引用特定的数据库行。例子:

您有一个名为SocialNetwork. 这是一个查找表。该应用程序不会写入或删除它。它主要用于数据库完整性;假设整个shebang看起来像这样:

在您的代码中,需要为 Facebook 用户执行一些特殊的逻辑。我通常做的是在代码中创建一个枚举或一些类常量以轻松引用它,例如:

这是一个硬编码的数据库 ID。这不是一个巨大的犯罪,因为它只是引用一个查找表,但数据和逻辑之间不再有清晰的划分,这让我很困扰。

我能想到的另一种选择是在数据库中指定类或委托的名称,但这更糟糕的是 IMO,因为现在您不仅打破了数据和逻辑之间的划分,而且还把自己绑在了一个现在的语言。

我是在无事生非吗?

0 投票
3 回答
149 浏览

oop - 公共功能之间的耦合

假设我有一个名为 do3() 的函数为了使该函数工作,我需要执行函数 do1() 和 do2()。

但是,其他东西也可能需要 do1() 和 do2()(可能是 do4())

所有这些功能都是公共的(并且必须是公共的)。

问题,我应该如何实现代码?

选项1 :

因此,如果我调用 do3(),我确信一切都会完成,尽管会出现耦合

选项 2

所以当我想调用 do3() 我必须

我觉得第二种选择更好,因为它的耦合更少,但是我无法解释为什么,它更像是一种感觉。我认为如果我使用选项一和一天我更改 do2() 我可能会遇到问题。

但是,对于选项 2,我必须确保每次我想使用 do3 时都调用 do1 和 do2。

如果有人有更好的主意(选项 3?)会很棒。

谢谢

0 投票
2 回答
260 浏览

asp.net-mvc - 不通过实体查看的好处

我经常看到人们告诉你不应该将实体传递给你的视图。他们说您应该改用 DTO/VO/ViewModel/AnyOtherThingYouWant,因为使用实体会增加耦合。忽略我确实需要一些额外逻辑(或者我不需要所有属性)的时刻,我看不到这样做的任何好处。例如,考虑以下类:

我看到很多创建另一个类的代码,如下所示:

在视图中使用它,然后执行以下操作:

我看不出这比简单地使用 Contact 类有多好,因为您的 View 将耦合到一个耦合到实体类的类。因此,一个中的每一个更改都应该复制到另一个中。从我的角度来看,“中间”对象只是为了增加复杂性,而不是真正的价值。我知道没有“一刀切”的解决方案(有时,使用中间对象会很有意义),但我们真的需要添加这样的代码吗?真正的好处是什么?

0 投票
3 回答
133 浏览

oop - 整个程序使用的公共静态数据

代码示例是 C#,但这是一个一般的 OO 问题。

我知道根据 OO 规则,应尽量减少类耦合,成员应尽可能保持私有,等等。

考虑这个例子:

您正在编写一个深奥的程序,该程序具有某种数据集(我不是在谈论System.Data.DataSet),它实际上用于程序的各个方面。事实上,程序的存在基本上只是为了加载、显示、操作和保存数据集。此外,任何时候都只能加载一个数据集,并且在程序打开时加载。

如果我们严格遵循 OO 规则,我们将有

但是,例如,我们可能会将public static Data成员存储在 中Program

一方面,我们用一个稍短的函数签名换取了大大增加的类耦合。另一方面,我们不再将 Data 参数传递给几乎每个函数,无处不在

正确的答案可能是:尽可能避免类耦合。本地数据变量只是指针,因此内存开销可以忽略不计,并且由于类是解耦的,它们可以在以后在其他地方使用。

虽然现实地说,Data 类的结构在不同的应用程序中可能会有显着的不同,所以你不能直接从这个程序中拉出一个类,然后把它放到其他地方而不做任何调整。以一种可以直接加入的方式编写类所需的额外时间和精力可能很难向利益相关者证明是合理的。

我现在正在研究这种程序,并且我使用了 OO-canon 方法:在需要的地方传递数据参数 我已经最小化了与 IData 接口的类耦合,以概括数据集以供将来代码重用。鉴于应用程序,我几乎可以肯定这段代码永远不会被重用。如果没有这些额外的接口和抽象,就最终用户而言,该程序的工作方式将完全相同,但对我来说将大大减少头痛和开发时间。

你怎么看待这件事?您是否认为花费所有额外的时间来编写接口和泛化以确保类在可能的情况下解耦是合理的,尤其是当您以后看不到在其他地方使用的类时?

0 投票
1 回答
2351 浏览

coupling - 测量耦合和内聚的工具

你知道有什么工具可以帮助我们测量系统中的耦合和内聚吗?

0 投票
3 回答
994 浏览

symfony - 在 Symfony 2 和耦合中集成 Bundles(相关 Doctrine 2 实体)

据我了解,Bundles 是为了分离功能。假设我有一个UserBundle& a BlogBundle。然后我BlogBundle:Post将有一个author引用的字段UserBundle:User。这不是违背了Bundles的目的吗?我不能换另一个UserBundle吗?我怎样才能以正确的方式做到这一点?还是这是最好的?

0 投票
5 回答
2758 浏览

oop - MATLAB和全局变量的使用?

我正在编写一个用于 dicom 图像和光谱学的工具,并且我想在我正在制作的功能之间使用很多共享数据。我有自己制作的 GUI,不同的滑块和按钮使用来自 dicom 文件的大量共享数据。

我一直在使用全局变量来存储所有这些函数共享的信息。我目前有很多全局变量。由于耦合增加,我被教导尽可能避免使用全局变量。在每个函数中从 dicom 文件中读取数据会更好吗?这似乎是多余的。将 MATLAB 用作面向对象的帮助吗?