问题标签 [cohesion]

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 投票
4 回答
1300 浏览

java - 提高类的凝聚力和耦合度

我得到了这组代码,需要提出改进代码内聚和类耦合的方法。但我认为这些类很好地解耦,因为看起来它们正在使用事件。就凝聚力而言,所有的 init() 调用都放在一起,对我来说一切都很好。

还有办法提高类的内聚和耦合吗?对我来说看起来不错,但我想我错过了一些东西。

感谢您对此提出任何建议。

0 投票
1 回答
363 浏览

design-patterns - DAO 模式是否会破坏凝聚力/SRP?

让我们作为例子:

有多少责任?1个还是4个?

0 投票
1 回答
429 浏览

oop - 在坚持 DRY 的同时保持低耦合

“保持高内聚和低耦合”(或一些变体)的口头禅经常被抛来抛去。但是,我发现它经常与“不要重复自己”相冲突。

例如,我认为我们都同意重新实现std::string或使用 C 字符串是一件坏事,但不包括std::string创建另一个依赖项并因此增加耦合?

再举一个例子,以std::stringstream. 它继承自iostream,继承自istreamand ostream,继承自ios,继承自ios_base。在所有这些派生中,它继承了许多功能 - 足以使手动重新实现成为一个非常糟糕的主意。即使只包括在内,它也会拉动<ios>和头,从而增加耦合。<istream><sstream>

如何在不为每个模块重新发明轮子的情况下保持低耦合?

编辑:如果这两个概念不能共存,应该偏爱哪一个?

0 投票
2 回答
2424 浏览

coupling - 凝聚力VS。耦合

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

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

这里是术语 T 的定义:

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

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

0 投票
1 回答
2351 浏览

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

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

0 投票
2 回答
150 浏览

java - 在这种情况下我需要制作自定义事件吗?

出于爱好,我正在制作游戏。游戏中有一个怪物追逐人类(类似吃豆人)。当吃豆人被卡住时,可以吃人或做一些动作;应该提出一个事件。这是因为我的程序变成了非循环,因为所有对象都必须相互了解,内聚有什么不好。

有一个类似对象(称为游戏)的控件,它应该响应事件;人类感动,怪物感动,人类吃掉,怪物卡住,最终让视图知道发生了什么事,所以它重新绘制。还有一点是,视图响应演员的按键,并且这些事件应该以某种方式(也通过事件)到达人类。

  1. 有人可以帮助我如何最好地解决这个问题吗?我已经在互联网上搜索了类似的问题,但没有遇到任何问题。

  2. 在 MVC 中:控制器知道视图吗?如果是这样:整个程序是从控制器开始还是从视图开始?(是什么造就了谁)

0 投票
1 回答
233 浏览

php - 通过对多个 RSS 提要重用 PHP 函数来增加凝聚力

如图所示,我的主页包含全球三个城市的天气

索引.php

在主页中,我声明了 3 个变量,用于存储每个城市的 RSS URL

我从上面显示的三个 URL 中提取相同的标签,并使用除了传递给它的变量之外的 3 个相同的函数。

下面显示了传递给函数的变量。显然,在返回 $weather 之前使用了其他函数。

正如我所提到的,我当前重复此函数 3 次,只是替换了上面示例中传递的 $newYorkWeatherSource 变量。有什么想法可以重复使用此功能 3 次,但传递不同的 URL 以保持我的主页显示来自 3 个城市的天气?当然,如果每个城市都在单独的页面上表示,则很容易重用该功能,但目的是将它们放在一起以进行比较。

有任何想法吗?

提前致谢。

0 投票
3 回答
296 浏览

php - 重用 PHP 函数从 XML 文档访问数组项标签

我创建了一个网站,其中包含使用 XML 来驱动其一些内容,例如,如下所示的当前汇率。

在此处输入图像描述 该网站比较了三种汇率,我目前对每个执行相同目标的城市使用单独的函数,例如返回当前汇率。

这些函数之间的唯一区别是我从中请求数据的 XML 文档中 item 标记的位置。

注意 上面数组中的item[15],它提供了对欧元货币的访问。在下文中,美国货币是项目[56],如下所示。

如果可以将三个功能组合成一个功能以增加凝聚力,有什么想法吗?

我用于访问欧元货币的功能是:

提要 URL 设置在另一个名为 cityConfig.php 的配置脚本中

提前致谢

0 投票
5 回答
1300 浏览

java - 处理大类

在过去的几个月里,我最近开始使用 Java 进行编码。我有一个 Matrix 类,它有很多方法,变得过于臃肿。我还有一个 SquareMatrix 类,它扩展了 Matrix,并减少了一些臃肿。

我发现 Matrix 类中的许多方法通常与矩阵相关。它具有所有基础知识,如 addMatrix(Matrix)、multiplyMatrix(Matrix)、multiplyMatrix(float),以及更复杂的方法,如 getGaussian(Matrix) 或 getLUDecomposition(Matrix)。

在减少班级矩阵中的行数方面,我有哪些选择?一个类变得非常大是正常的吗?我不这么认为......这是我应该尽早考虑的事情并且重构很困难吗?还是有简单的解决方案?

谢谢!


编辑:在阅读了几个回复后,我正在考虑执行以下操作:

实用程序类Matrix 包含矩阵的所有常用/基本方法

委托类(Helper/sub):

*助手类* getGaussian(..), getLUFactorization(..), ...

子类 (扩展矩阵)SquareMatrix、LowerTriMatrix、UpperTriMatrix、...

委派似乎类似于在 C++ 中定义多个带有标头的 .cpp 文件。仍然欢迎更多提示。


Edit2:另外,我更喜欢通过正确设计来重构,而不是快速修复。我希望它对未来的项目有所帮助,而不仅仅是这个。

0 投票
10 回答
90692 浏览

cohesion - 什么是高内聚力以及如何使用/制造它?

我正在学习计算机编程,在几个地方我偶然发现了凝聚力的概念,我明白软件具有“高凝聚力”是可取的,但这意味着什么?我是一名 Java、C 和 Python 程序员,从《C++ Primer》一书中学习 C++,其中提到了内聚性,但没有在索引中包含它,你能给我指出一些关于这个主题的链接吗?我没有找到关于计算机科学凝聚力的维基百科页面,因为它只是说这是一种定性衡量标准,并没有给出真实的代码示例。