Architecture 将顺序衔接转变为功能衔接?

Architecture 将顺序衔接转变为功能衔接?,architecture,theory,ooad,cohesion,Architecture,Theory,Ooad,Cohesion,如上所述 具有(仅)过程内聚性的模块支持不同且可能不相关的活动,其中控制权从一个活动传递到下一个活动。Page Jones给出了一个模块的示例(其名称可能类似于,`Prepare for Holiday Me餐:“” 清洁上一餐的餐具 准备烤火鸡 打电话 洗澡 切菜 餐桌 现在我的问题是,如果这些活动中的每一个(比如打电话)都被提取到它们自己的方法中,但它们仍然是按相同的顺序被调用的 即 这种方法仍然是程序衔接的一个例子吗?或者它在功能上是衔接的,因为它支持执行一项与问题相关的任务的活动,在

如上所述

具有(仅)过程内聚性的模块支持不同且可能不相关的活动,其中控制权从一个活动传递到下一个活动。Page Jones给出了一个模块的示例(其名称可能类似于,`Prepare for Holiday Me餐:“”

  • 清洁上一餐的餐具
  • 准备烤火鸡
  • 打电话
  • 洗澡
  • 切菜
  • 餐桌
现在我的问题是,如果这些活动中的每一个(比如打电话)都被提取到它们自己的方法中,但它们仍然是按相同的顺序被调用的 即


这种方法仍然是程序衔接的一个例子吗?或者它在功能上是衔接的,因为它支持执行一项与问题相关的任务的活动,在这种情况下是为准备一顿饭吗?

在您的示例中,电话被省略是有充分理由的。这是一项不相关的任务。如果您假定电话仍然处于“…”状态否则,你可能会争辩说,所有其他活动都是准备一顿饭所必需的。这可能会引发一场关于“干净的餐具是否来自上一顿饭”的讨论实际上在这里是有效的,因为此活动可能仅在以前没有清理的情况下才有必要。StackExchange问题不适用于此类讨论……因此,我们需要一个更清晰的示例,以便多个软件架构师就决策达成一致。否则,一些人可能会与其他人争论不同。

这是一个非常有趣的问题,是的,答案是相对的,取决于我们理解事物的方式[写在文章中]以及它们如何符合作者的意思

特别是在程序性衔接和功能性衔接之间,有一个细微的区别:程序性衔接是指包含相互无关的步骤的东西,也就是说,程序没有“目标”,它是可重复的,需要“固定定义”它然而,功能衔接基本上是一种功能(可能接受输入并给出输出),它可以用于不同的输入,并且在重复使用时会产生正确的输出(取决于输入)


结论,根据您的问题:不,将每种方法放在不同的方法中,并以相同的顺序调用它们,不会将其从过程更改为功能,除非您的过程成为一个真正具有“目标”的函数.

我明白你所说的CleanPoolers和makePhoneCall的有效性。我的问题不在于方法本身的实际内容,而在于主要PrepareHolidayMean方法的结构。即假设所有操作都是有效和必要的,将它们转移到自己的方法中会改变结果吗从程序到功能的内聚类型?内聚意味着“粘在一起”-如果你将它们分开,事情会更好。一旦你再次开始捆绑,你需要小心。你仍然可以创建新的捆绑包,这至少是有帮助的。接下来的问题可能是信息隐藏被破坏了。因此你需要一个良好的平衡。
    private void PrepareForHolidayMeal()
    {
    CleanUtensilsfromPreviousMeal();
    PrepareTurkeyforRoasting();
    ...
    SetTable();
    }