问题标签 [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 投票
3 回答
273 浏览

java - java编程中的内聚查询

您将如何定义以下代码?

a) 高凝聚力

b) 低凝聚力

我会说高,因为takeAndGlue()即使用 2 种单独的方法调用 2 件事,它们stackTrace也是可追溯的。

0 投票
1 回答
327 浏览

oop - 以不改进设计的方式应用得墨忒耳定律

假设,我们有以下Boy类,它试图Girl通过分析她的日程安排来安排日期(Java 中的示例):

Boy.tryArrangeDate()由于routine.happensAt()调用,该方法显然违反了得墨忒耳法则。解决此问题的方法之一是将进度分析直接Girl移至GirlRoutine. 在这种情况下,这可能是最好的决定之一。类的 RFCBoy将减少。

但是假设我们选择不同的方向来解决违反德墨忒耳法则的问题,并以这种方式更改代码:

添加了两个私有方法,它们只是将调用委托给Girl她的日程安排/例程。

每个单独采用的方法似乎都没有违反得墨忒耳法则(为了简单起见,让我们将从集合中检索项目视为原始的无方法调用操作)。但总的来说,我们并没有减少这个类的 RFC,也没有提高内聚性,实际上增加了 WMC。告诉,不问原则是不保留的。所以,得墨忒耳法则满足了,但设计仍然不稳定。

问题:( 正式)第二个代码片段确实不违反得墨忒耳定律吗?

注意:问题的目的不是寻找替代解决方案,而是确认/反驳该解决方案符合得墨忒耳定律

0 投票
1 回答
672 浏览

javascript - 在 EF 中使用 JavaScript 建模表单

JavaScript 内聚是如何发挥作用的?让我更好地解释一下:我有我的索引页面,它使用 jquery 对话框调用模型表单,但我不想将所有 javascript 放在索引页面中,而是希望 jquery 单独用于页面。

模型形式

在此处输入图像描述

这部作品

应该如何工作

并根据您的具体情况对表单进行建模

实际上,当我制作它时,模型 javascript 不起作用。

我正在使用实体框架,感谢您所做的一切。

解决方案

0 投票
5 回答
4774 浏览

ios - 在一个窗口中嵌入多个视图控制器

我想要一个包含多个视图的视图。见下图: 在此处输入图像描述

如您所见,pageController 控制页面导航并在 viewController(页面)之前和之后提供。

pageContentController 显示文本并处理它们。

soundPlayer 管理播放相关声音

我可以将所有这些都放在一个控制器中,但是我的控制器必须完成很多任务并且管理它是一项艰巨的任务。因为它不服从灯光视图控制器。并降低其凝聚力。所以我想知道我怎样才能做到这一点,请详细解释。

0 投票
0 回答
851 浏览

java - 通过外观模式减少耦合和内聚

对于我的软件设计课,我必须找出是否可以通过使用 Facade 模式同时减少耦合和内聚?

大家可能都知道,当耦合度低时,类的内聚度高,反之亦然。

对我来说,这是一个矛盾的状态,但我仍然认为这是可能的,但找不到足够的证据来支持这一点。

我的回答是这样的。这样做的原因是,如果我们向具有内聚性的类提供一些指令,如果没有指令,它们将不会以相同的方式运行。鉴于此,假设我们具有与指令相同的外观,这些指令能够从具有低耦合或高耦合的类接收属性。如果这是真的,那么这些类就不会那么相互依赖,并且耦合也会减少。这样我们就有了一个外观,它同时减少了类的耦合和内聚。

0 投票
1 回答
85 浏览

c++ - 从默认构造函数调用重载构造函数时维护对象状态信息

这个问题的标题很拗口。基本上,我正在创建一个在向量中使用双向链表的哈希表结构。当我使用重载的构造函数创建对象时,一切正常,但是使用默认构造函数会导致对象的状态在返回到 main 后变得时髦。

我的构造函数:

创建对象后设置断点

单步执行代码,我看到它调用了重载的构造函数,但是在返回 main 然后尝试使用表(仅使用默认构造函数时)后,向量的大小和变量 currentSize 出错了。

创建对象后,返回main之前:

在 main 中调用ht.hash(value)时,该对象现在具有:

什么会导致向量将自身重置为 0 并且我的私有 int currentSize 变得时髦,特别是因为代码路径都可以通过HashTable(int tableSize)

0 投票
1 回答
26 浏览

oop - 我的类是否应该为每种文件格式提供一个方法,或者我应该将 I/O 委托给其他特定于文件格式的类?

在给定的域中,可以有多种文件格式表示相似的对象或结构。例如,一个类型的对象Track(意味着一系列地理点)可以保存为 .GPX、.KML、GeoJSON、WKT、ShapeFile 等。

所以,我的班级Track应该从文件中读取和保存它的数据,这些文件可以是不同的格式。

问题是:

我的类应该实现从每种文件类型读取的方法(即“了解”它们),还是应该使用其他类,其中每个类都包含与每种文件类型的实现细节进行交互的逻辑?标准做法是什么?

第一个选项的编码如下:

而第二种选择可能是:

在我看来,涉及单一职责原则、信息隐藏和类之间的相互依赖的某些特征可能会使一种方法比另一种方法更好,但我没有足够的经验来确定哪一种方法(如果有的话)。

0 投票
5 回答
14463 浏览

validation - 您如何手动计算集群的轮廓、凝聚力和分离度

再会!

不幸的是,尽管有资源,但我一直在互联网上寻找如何计算轮廓系数、凝聚力和分离度的方法,但我就是无法理解发布的公式。我知道在某些工具中有它的实现,但我想知道如何手动计算它们,特别是在给定向量空间模型的情况下。

假设我有以下集群:

集群 1 ={{1,0},{1,1}}
集群 2 ={{1,2},{2,3},{2,2},{1,2}},
集群 3 ={{ 3,1},{3,3},{2,1}}

根据[1],我理解它的方式是我必须得到每个集群点的平均值:

C1 X = 1;Y = .5
C2 X = 1.5; Y = 2.25
C3 X = 2.67;Y = 1.67

给定平均值,我必须通过平方误差和 (SSE) 来计算我的凝聚力:

内聚力(C1) = (1-1)^2 + (1-1)^2 + (0-.5)^2 + (0-.5)^2 = 0.5
内聚力(C2) = (1-1.5) ^2 + (2-1.5)^2 + (2-1.5)^2 + (1-1.5)^2 + (2-2.5)^2 + (3-2.5)^2 + (2-2.5)^2 +(2-2.5)^2 = 2
内聚力(C3) = (3-2.67)^2 + (3-2.67)^2 + (2-2.67)^2 + (1-1.67)^2 + (3- 1.67)^2 + (1-1.67)^2 = 3.3334

集群 (C) = 0.5 + 2 + 3.3334 = 5.8334

我的问题是:
1. 我是否正确地执行了凝聚力?
2. 我如何计算分离?
3. 如何计算轮廓系数?

谢谢你。


参考文献:
[1] http://www.cs.kent.edu/~jin/DM08/ClusterValidation.pdf

0 投票
4 回答
594 浏览

java - 对象内聚的 Java 标准是什么?对象中的太多信息是否意味着糟糕的设计?- 见例子

我正在创建一个模拟机场着陆系统的项目。我有一个plane对象,它存储我需要的所有信息,以将其分类planequeue存储在数据库中。所有重要信息都包含在对象中,但我还包含了每个平面的坐标。我的问题是它可能不被认为是有凝聚力的,因为每个人都plane做了很多不同的事情。

我只是想知道这是否被认为是糟糕的设计,还是有更好的方法来做到这一点?

另外,对象内部凝聚力的“规则”是什么?是否有特定的设计模式可以解决这个问题?

0 投票
2 回答
1439 浏览

java - 不使用 Spring 等时如何将 Swing GUI 从业务逻辑中分离出来

请注意,这是一个很长的帖子。很抱歉,但我想澄清一下:

很长一段时间以来,我一直在想如何将 Swing GUI 与 Presentation 和 Business Logic 分开。在工作中,我必须使用一个小的 Swing 对话框为一些数据实现 3 MD Excel 导出来配置导出。我们不使用像 Spring 这样的框架,所以我必须自己实现它。

我想将 GUI 与业务逻辑完全分开,它们的任务如下:

  • 告诉 BL 从 GUI 开始它的工作
  • 从 BL 向 GUI 报告进度
  • 从 BL 到 GUI 的报告记录
  • 将 BL 结果委托给 GUI

当然 GUI 不应该有 BL 实现的通知,反之亦然。我为上面的所有任务创建了几个接口,例如 a ProgressListenerLogMessageListenerJobDoneListener等,由业务逻辑触发。例如,如果业务逻辑想要讲述日志记录,它会调用

实现公共接口 LogListener + 的类附加到 BL,现在将收到有关“作业已启动”日志消息的通知。所有这些监听器此时都由 GUI 本身实现,一般看起来像这样:

“GUI 和 BL 创建类”只是将 GUI(作为所有这些侦听器的接口)附加到 BL,如下所示:

我现在对此非常不确定,因为所有这些新创建的侦听器接口看起来很奇怪。你有什么想法?如何将 Swing GUI 组件与 BL 分开?

编辑: 为了更好地展示目的,我在 eclipse file-upload.net/download-9065013/exampleWorkspace.zip.html 中创建了一个演示工作区,我也将它粘贴到了 pastebin,但最好在 eclipse 中导入这些类,很多代码http: //pastebin.com/LR51Ummp