问题标签 [tightly-coupled-code]

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 投票
5 回答
676 浏览

design-patterns - 紧密耦合对象的症状是什么?

在设计应用程序时,您何时知道您的对象是紧密耦合的?紧密耦合的对象/代码的症状是什么?

0 投票
2 回答
222 浏览

php - 在不创建依赖项的情况下避免幻数

我正在为我正在处理的 API 创建一个错误管理器。这个想法是它提供了一个可以从 API 返回的错误代码的单一存储,确保以相同的方式处理不同调用中的相同错误(例如,请求中缺少所需的值)。

我最初的方法是:

但是,这会在我想设置错误的任何地方创建对错误代码类的依赖。

替代方案是:

但是现在我的代码中间有一个数字,这没有任何意义。

虽然我可以想到这个特定问题的解决方案,但在其他情况下我会想要使用“枚举”,而我想不出一个不紧密耦合类的解决方案。

有没有更好的方法来做到这一点,或者我可以采取不同的方法来删除幻数?还是我必须根据具体情况接受和考虑紧密耦合?

0 投票
1 回答
711 浏览

actionscript-3 - 如何避免紧耦合?

上周我一直在努力解决这个问题,但似乎找不到既不需要单例也不需要紧耦合的解决方案。我正在开发一款 3D 太空游戏,这里有一个早期的
演示
......从平视显示器(Hud 类)中选择。

游戏的结构是:
Game 类包含 Hud 和 ObjectsList 类。
ObjectsList 类包含各种游戏对象,包括玩家、各种船、行星和轨道(空间站)。
当玩家到达轨道的一定距离内时,任务会被实例化。
任务被添加到一个 MissionsList 类,它本身在 ObjectsList 中。
任务可能会变得不可用并在没有警告的情况下过期(就好像它们被另一个飞行员选择了一样),因此显示在 Hud 上的列表是动态的并且会定期更新。
以前,我已经让任务将事件发送到 Game,而 Game 又将更改通知 Hud。这对我来说似乎有点笨拙,因为信息需要传递到 Hud 的各种更深层次的“层次”。我最终得到了很多相同的功能。

我正在考虑的解决方案是将 MissionsList 类的引用注入到 Hud 中,使其能够监听来自 Missonslist 的更新。我听说将某物的状态与其显示混合是一种不好的做法,但我不知道如何将任务的“实时”列表获取到 Hud。相比之下,如果 Hud 只包含显示细节而不参考生成这些细节的任务对象,那么当玩家从 Hud 中选择一个任务时,我如何确定选择了哪个任务?在这种情况下紧耦合可以吗?还是我应该使用单例与 Hud 进行通信?如果我建议的任何事情存在根本性的错误,我欢迎被告知那是什么以及最佳解决方案是什么。谢谢。

0 投票
1 回答
985 浏览

laravel - Laravel 外观和紧耦合控制器

我很难理解如何才能做到最好。我了解外观如何作为语法糖工作,以呈现清晰的静态代码布局风格,同时保持代码松耦合和可测试。

但是我有以下问题。每当我有一个控制器时,控制器都依赖于类的负载。让我们以输入类为例。每个控制器都是一个 IoC 容器,所以实际上这很好。因为如果我想用另一个类更改输入类。我只需要创建一个实现正确接口的新类。然而,这意味着我的应用程序中的每个控制器都依赖于相同的输入类。我理解对吗?

所以我读了这篇非常好的文章: http: //www.nathandavison.com/posts/view/16/using-dependency-injection-and-ioc-in-laravel-4-controllers

简而言之,它建议在您的控制器中使用依赖注入 (DI)。例如

这确实是有道理的,但这不是框架的理念,因为它绕过了外观......我想听听关于这种方法的意见。这是好习惯吗?

0 投票
1 回答
118 浏览

code-structure - 尽量避免应用程序参数的紧密耦合

我的 Web 应用程序有一个方法可以解析这样的 URL 参数。

我们公司的一个部门有一个包含此应用程序参数的 URL 列表,由于我不知道的原因,这些参数很难更改。他们可能会使用这样的 URL。.../default.aspx?Service=Wells&Layer=ActiveWells&Query=XYZ IN ('1234567890...')

最近,发生了类似于以下情况的变化。“ActiveWells”图层名称更改为“Surface Participation Wells”。“BoreStick”图层名称更改为“WellBores”。因此,该部门的预设 URL 参数不再起作用。

我的经理告诉我添加将“ActiveWells”的任何实例更改为“Surface Participation Wells”之类的代码。经理接着说,稍后当带有 URL 参数的部门将它们全部更改为新名称时,我们可以删除该代码。

我不知道究竟什么是“紧耦合”;但我知道这很糟糕,这听起来像是一个例子。在我看来,添加代码以暂时保留并稍后删除它也是一个坏主意,因为该代码可能永远不会被删除并变成化石。

但是我按照我的命令添加了这样的代码:

静态 LayerNameChange 方法中有一个 switch 语句。

从现在开始的几个月或几年后,当其他部门完成更改所有预设的 URL 参数时,负责此应用程序的开发人员应该知道进来并删除它。

我想另一个与此类似的场景是,如果基于控制台或 Windows 的应用程序具有它所期望的参数

有没有更好的方法来做到这一点?


编辑:

如果不是我上面所说的,我做了类似下面的伪代码。

调用方法会有某种,

为什么解析方法需要知道 NameConverter 类的存在?
这就是我问自己的。
毕竟,正如我所见,这不是解析 URL 参数的责任的一部分。

我不知道我是不是想多了。我对这种发展感知水平是新手。我知道这个问题已经得到解答,但如果对我的这个新想法有任何进一步的评论,我们将不胜感激。

0 投票
2 回答
779 浏览

java - Hibernate 和 SQL 可移植性

我是持久性的新手,我正在阅读“Pro JPA 2”一书。我读到Java和JDBC包的问题是

  1. SQL 不可移植
  2. Java 代码和 SQL 之间的紧密耦合

JDBC 具有讽刺意味的是,尽管编程接口是可移植的,但 SQL 语言却不是。尽管进行了多次标准化尝试,但编写在两个主要数据库平台上不变运行的复杂 SQL 仍然很少见。即使在 SQL 方言相似的情况下,每个数据库的性能也会根据查询的结构而有所不同,在大多数情况下都需要针对供应商进行调整。

我的问题是:

  1. 与 SQL 可移植性相关的问题是否仍然如此关键?
  2. 据我了解,Hibernate、TopLink 和其他框架也必须从它们的元数据(注释)创建 SQL 查询。他们如何安排与 SQL 可移植性相关的问题?
  3. Java 和 JDBC 紧耦合意味着开发人员必须编写 SQL 查询。我理解正确吗?

提前感谢您的回复)

0 投票
2 回答
242 浏览

spring - 实现一个接口是紧耦合的?

这里说_

我不建议使用 InitializingBean 和 DisposableBean 接口,因为它会将您的代码与 Spring 紧密耦合

是否有意义?我认为这与紧耦合正好相反。

0 投票
2 回答
106 浏览

bash - 在耦合的 shell 脚本之间干净地传递选项

我有一个 (bash) shell script myBaseScript.sh,具有以下签名:

该脚本myBaseScript.sh通过 解析选项getopts,如下所示:

现在我希望创建一个脚本mySuperScript.sh,它调用myBaseScript.sh,允许将选项转发到基本脚本:

[OPTIONS]使用的选项在哪里myBaseScript.sh;它们用于mySuperScript.sh.

该脚本mySuperScript.sh将爬取所有目录DIR1[DIR2]等等,编译一个有效文件列表,${FILES[@]}然后传递给myBaseScript.sh.

现在我有这个mySuperScript.sh

where${FILES[@]}当前路径中的文件列表。换句话说,这允许

但不适用于任何可选DIR1的 ,[DIR2]等。

我可以使用

然后传递as to的第一个$OPTIND条目。但这似乎过于复杂,而且需要将有效选项列表复制到,这是管理上的噩梦。$allOpts[OPTIONS]myBaseScript.shmyBaseScript.sh

我还可以创建一个新脚本,专门用于解析这些选项。但这似乎也有点尴尬,因为它产生了一种myBaseScript.sh以前不存在的依赖关系......

那么,最干净的方法是什么?

0 投票
1 回答
429 浏览

java - JPA - 如何避免紧耦合和冗余?

(仍然不时学习 OO 原则以更好地理解 OOP。)

三个 (JPA) 实体具有以下 has-a 关系:

A有一个B的集合,B一个指向A的字段“a” (双向关系)B有一个C的集合,C一个指向 B 的字段“b”(双向关系)

(我想说通过使用 JPA,您可以免费获得紧密耦合。这当然不是很好。)

ABC有一个字段'nr'。这些字段一起形成一个由点划分的 id。像这样的东西:####.####.####

现在我想请A建立那个数字。遵循 OO 原则的正确方法是什么?在我看来, C不应该对BB不了解A

0 投票
0 回答
55 浏览

android-layout - 我会为将我的布局与我的活动半分离而感到抱歉吗?

至少在Droidio(Android Studio)中(我不知道Eclipse,但ItelliJ Idea也可能是这种情况,因为Droidio是基于它的),当你创建一个新的Activity时,也会创建一个对应的Layout文件. 默认情况下,它通过两个属性与 Activity 紧密耦合,即下面的“xmlns:tools”和“tools:context”行:

这对我来说似乎很奇怪/不必要,因为 Activity 也通过这种方式自动绑定到其 *.java 文件的 onCreate() 方法中的相应布局:

这是一个简单的“彻底”(穿皮带吊带)的情况,还是耦合太紧的情况?布局端(到控制器/活动)的显式接线对我来说有点代码味道。如果我从 xml 中删除两个有问题的行(“xmlns:tools”和“tools:context”),它仍然可以正常工作,所以我不明白它们的用途。

我会为我半解耦活动/布局(控制器/视图)的毫秒而感到后悔吗?