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

java - Spring框架中的路由url可以更容易完成吗?

在一个文件(例如 yaml、xml 或属性文件)中将 webapp 路由到一个位置,以定义 webapp 的路由和 url,并将 url 与各个方法或函数连接起来似乎是个好主意。为什么 Spring 不这样做?框架webapp2就是这样,并且很容易以这种方式处理。带有正则表达式的 url 路由方案看起来像 yaml 中定义的良好可读性

Struts 也是这样使用 xml 进行路由的。然而,Spring 没有一种很好的方法来将所有路由收集到一个地方。有一些在 xml 文件中,一些作为注释(直接写在处理程序中的方法声明之上),还有一些可以被插件覆盖,例如 urlrewrite。

为什么不能在一个地方为 Spring webapp 收集路由?那不是更好的设计和更高的凝聚力吗?有时,一个 webapp 不能有多个 webcontext 也是一个问题。似乎 servlet 规范不允许一个 webapp 使用多个 webcontext,并且它必须是双射。为什么?

0 投票
1 回答
1650 浏览

c# - 构建可测试的业务层逻辑

我正在使用分层架构的 .net/c#/Entity Framework 中构建应用程序。与外界的应用程序接口是一个 WCF 服务层。在这一层之下,我有 BL、共享库和 DAL。

现在,为了使我的应用程序中的业务逻辑可测试,我正在尝试引入关注点分离、松散耦合和高内聚,以便能够在测试时注入依赖项。

我需要一些指针来判断我下面描述的方法是否足够好,或者我是否应该进一步解耦代码。

以下代码片段用于使用动态 linq 查询数据库。我需要使用动态 linq,因为直到运行时我才知道要查询的表或字段的名称。代码首先将json参数解析为types对象,然后使用这些参数构建查询,最后执行查询并返回结果

这是下面测试中使用的 GetData 函数

这是 DAL 中查询助手类及其接口的高级定义

这是使用上述逻辑的测试。测试构造函数将模拟的数据库注入 Context.DatabaseContext

我的问题

  1. 这个业务层逻辑“足够好”还是可以做更多的事情来实现松耦合、高内聚和可测试的代码?
  2. 我应该注入数据上下文以在构造函数中查询吗?请注意,QueryHelper 定义位于 DAL 中。使用它的代码位于 BL

请让我知道我是否应该发布其他代码以清楚起见。如果接口 IQueryHelper 足够,我最感兴趣..

0 投票
1 回答
155 浏览

c# - 如何将 jqGrid 代码从控制器的 JsonResult 方法重构为松散耦合的模型?

我正在使用代码项目中的一个示例:ASP.NET MVC-4,Entity Framework and JQGrid Demo with simple Todo List WebApplication。但是,由于控制器正在处理所有业务逻辑,因此开发人员并没有最大限度地提高内聚力。我正在尝试将 JsonResult 方法与控制器分离,并创建松散耦合的类来处理模型中的所有业务逻辑。

这是我的原始代码:

为了开始分解逻辑,在控制器中,我创建了几个类:

然后下面的类调用方法返回数据:

所以现在,在控制器中,我应该能够让控制器调用:

但是,jqGrid 没有被填充。当控制器处理所有逻辑时,我怀疑它与原始代码中的(如下所示)有关。

有人可以帮我理解我做错了什么吗?你看到我哪里出错了或者我没有调用正确的方法吗?

谢谢。

0 投票
4 回答
687 浏览

java - 耦合和内聚示例(重构代码)

我知道耦合和内聚是什么意思。
我有以下示例,它存在一些可维护性问题,因此需要进行一些重构:

问题是,除了 GLOBAL VARIABLES 之外,我无法关联任何耦合、内聚或任何其他可维护性问题。如何在没有此全局变量问题的情况下重构以下代码(因为全局变量会增加复杂性并增加代码的不灵活性?!)

我在想它重构如下:

这看起来对吗?或者有没有其他有效的重构方法?

0 投票
1 回答
49 浏览

c - scanf 是内聚的还是耦合的?

我开始知道 scanf 是耦合的,它是耦合的,因为它需要不同类型的输入,如整数、浮点数、字符等。

但是内聚表示执行单个任务,而 scanf 执行此任务(扫描来自标准输入的输入)。

我同意,虽然它完成了预期的阅读任务,但它在阅读不同类型数据的形式上缺乏凝聚力。

但是读取不同类型的数据如何表明它是耦合的呢?我看到耦合是组件/模块连接到其他模块或模块独立性的程度。读取不同类型的数据如何使其依赖?

谁能解释我们怎么能说一个函数是耦合的或内聚的,而 scanf 是耦合的还是内聚的?

0 投票
1 回答
79 浏览

java - 遵守 JavaBeans 命名标准是否有助于实现封装?

java bean命名标准是否可能有助于实现封装?

不是有助于封装的访问修饰符吗?

0 投票
3 回答
57 浏览

java - 这么简单的方法怎么分解命名?

最佳实践不断要求一种方法只对一件事负责。我遇到了一种做 3 件事的方法,但我不知道如何 1. 根据最佳实践分解它。2. 命名。另外我想知道现实生活中有多少方法真的只做一件事,就像教科书一直建议的那样?

正如我们所见,名为 method 的方法不仅仅做一件事。是否甚至可以遵守“方法应该只对一件事负责”的规则?

如果是,如何将上述算法分解成它?

如果不是,我可以命名一个做这么多事情的方法吗?

0 投票
1 回答
213 浏览

java - 增加简单 Java 程序的内聚力

我有一个小型 java 程序,它收集用户编写的 10 个单词并按指定顺序打印它们。就目前而言,该程序有效,但没有凝聚力。

我的问题源于对内聚概念的了解不足以解决这个问题,以及对 Java/OO 语言不熟悉。

我认为 Entry 类太杂乱了,另一个类应该承担这个类的一些功能。

任何暗示或线索,神秘或其他,将不胜感激!

Dialogue.java 中缺少输入阅读器是有意的,因为原始代码使用专有代码。

这些是三个类:入口、对话和打印机。

入口.java

对话.java

打印机.java

0 投票
1 回答
93 浏览

optimization - 方法的凝聚力——计算和辅助函数呢?

内聚度量背后的假设是,如果方法在相同的类级别变量上工作,则它们是相关的。如果方法完全适用于不同的变量,则它们是不相关的。在一个内聚的类中,方法使用相同的变量集。在非内聚类中,有一些方法适用于不同的数据。

在度量标准中,从不共享访问权限的方法对中减去共享对实例变量、字段的访问权限的方法对的数量。

但是那些简单地执行计算并返回值的方法呢?我有很多,但由于它们不共享任何实例变量,因此建议将它们分开,这对我来说没有意义。

0 投票
1 回答
752 浏览

class-design - 只有一个功能的类是否足够有凝聚力?

在他的帖子SOLID: 下一步是功能性的,Mark Seemann 说:

如果您不断推动您的设计朝着越来越小的接口方向发展,您最终会到达最终的角色接口:具有单一方法的接口 [...] 如果您像这样应用 SRP 和 ISP,您可能会进化具有许多细粒度类的代码库,每个类都有一个方法。这在我身上发生了不止一次。

我关心的是此类课程的凝聚力。这种方法是否会促进功能凝聚力?这些类没有凝聚力吗?对代码一致性有不良影响吗?