gpt4 book ai didi

architecture - 端口和适配器/六边形架构 - 术语和实现的澄清

转载 作者:行者123 更新时间:2023-12-04 02:53:12 25 4
gpt4 key购买 nike

在阅读了有关端口和适配器架构的不同资料后,包括 Alistair Cockburn 的 original article我仍然不确定术语“端口”和“适配器”的明确含义——尤其是在将这些概念映射到实现工件时。

几个来源(例如 this post )暗示此架构模式中的端口是最外部的工件,然后是中间层中的适配器,在端口和核心应用程序之间进行转换。

然而,在 Cockburn 的原始文章中,端口出现在适配器层的外部和内部,具体取决于通信方向:

  • 入站通信:“当事件从外部世界到达端口时,特定于技术的适配器将其转换为可用的过程调用或消息并将其传递给应用程序。”
  • 出站通信:“当应用程序有东西要发送时,它会通过端口将其发送到适配器,适配器会创建接收技术(人工或自动)所需的适当信号。”

  • 实际上,对我来说,“所有外部”方法和“内部和外部”方法都没有意义 - 我将端口视为始终放置在应用程序旁边的工件,无论通信方向如何。 Imo 这也与端口和适配器的隐喻一致:例如。有一个带有串口的设备,要将另一个没有串口的设备连接到这个设备上,我需要一个适配器,从我的设备的角度来适应入站和出站通信。

    谈到这个架构的实现,我会看到端口的定义,而不是我的应用程序的一部分,我会看到不同的适配器在我的应用程序“外部”。例如。单个端口的实现可能包含 facade (由适配器调用以进行入站通信)和 interface (由用于出站通信的适配器实现)。

    术语端口和适配器的正确含义是什么?如何将这些概念映射到实现工件?

    更新:

    找到 this article这类似于我的理解。问题仍然存在,是否存在某种共同协议(protocol)。

    最佳答案

    从我的角度来看,在阅读了原始文章并观看了 Alistair Cockurn 的一些演讲(“Alistair in the Hexagone”)之后,我认为正确的方法是你所说的“全在里面”,即在呼入和呼出通信中,端口在适配器“内部”。适配器位于与应用程序交互的外部参与者和端口之间。端口属于应用程序。

    对于入站通信,actor(驱动actor)使用驱动适配器触发通信。此适配器调用应用程序的驱动程序端口,请求应用程序执行某些操作。

    对于出站通信,应用程序通过定义和调用驱动端口来触发与驱动参与者的通信。此端口是应用程序在用途方面所需内容的契约(Contract)(通常是接口(interface))。此端口由适配器实现,该适配器与外部参与者通信。

    依赖项应该是:

    Driver Actor --> Driver Adapter --> Hexagon <-- 驱动适配器 <-- 驱动Actor

    Ports 属于 Hexagon:

    驱动程序端口是 Hexagon 提供给驱动程序适配器的 API。

    Driven Ports 是 Hexagon 所需的 SPI,由 Driven Adapters 实现。

    你提到的这句话我也很挣扎,它出现在原始文章中:

    “当事件从外部世界到达端口时,特定于技术的适配器将其转换为可用的过程调用或消息,并将其传递给应用程序。”

    据说驱动程序端口是“外部”驱动程序适配器。但是读整篇文章,看谈话,我认为不是这样的。这句话所谓的“端口”,只是外部驱动actor和适配器之间的交互。 “端口”应该是适配器和应用程序之间的交互(“...将其传递给应用程序”)。

    关于architecture - 端口和适配器/六边形架构 - 术语和实现的澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23081105/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com