我试图告诉某人他的代码不是“连贯的”,因为它有多种用途。我认为我不能很好地解释它,所以我正在寻找一个好的参考和/或定义。
5 回答
我的电脑旁边有史蒂夫·麦康奈尔(Steve McConnell)编写的 Code Complete(即程序员圣经),打开的页面解释了凝聚力,所以我想我会分享,
内聚源于结构化设计,通常在与耦合相同的背景下讨论。内聚力是指一个类中的所有例程或例程中的所有代码支持一个中心目的的紧密程度——该类的集中程度。包含强相关功能的类被描述为具有强内聚力,启发式目标是使内聚力尽可能强。
我在重构时使用术语“关注点分离”来解释这一点。通常,当代码相当新时,由于最初并不清楚单独的关注点,事情会被混为一谈。
向您的同事说明这一点的一种简单方法是要求他们为代码编写测试用例。这应该说明代码不清晰或连贯。
另一个好用的短语是函数/对象“应该做一件事,并且做得好”,这对从对象/方法名称到系统整体架构的所有内容都有影响。
除了到目前为止给出的答案之外,考虑高内聚的一种简单方法是缺乏功能重复,以及将相关功能明确分离为不同的模块、组件或类。因此,如果您想要一个类似于另一个函数的函数,并且您剪切和粘贴并随后修改代码的副本,那么您正在减少内聚。如果您修改原始案例以处理新案例,其中新案例明显与现有功能相关,那么您正在增加凝聚力。换句话说,如果你的程序必须做一件给定的事情,无论多少次或在多少个地方,为了获得最大的凝聚力,应该只有一段代码可以做那件事。同时,给定的类、模块或组件应该有一个单一的职责范围。
正如 CodeWiki 所说,内聚通常与耦合一起讨论,其中两者可以相互对立,特别是在没有仔细规划严格接口的情况下。许多关于内聚的 google 文章都与 OO 设计有关,但内聚和耦合并不局限于 OO。
以有序、合乎逻辑和美学上一致的零件关系为标志;“一个连贯的论点” - 来自http://www.websters-online-dictionary.org/definition/coherent