我已经阅读了 Alistair 关于 Hexagonal 模式的文章并浏览了与此相关的其他资源(Alistair 的视频、端口和适配器的简短描述)。
我了解六边形架构的总体概念以及它为现代应用程序开发带来的优势。但是,我仍然对端口和适配器的实际实现有些困惑。
问题一:
从 Alistair 的文章中,
在一个实现中,端口和适配器以两种方式出现,我将它们称为primary和secondary,原因很明显。它们也可以称为驱动适配器和从动适配器。
他将端口分为驱动端口和驱动端口两类。驱动端口控制应用程序(GUI)和驱动端口由应用程序(数据库)控制。
因此,如果驱动端口应该只包含控制 API,那么驱动端口侧的适配器将如何获取事件通知。例如,在下图中,我有两个驱动适配器来控制应用程序,但它还需要来自应用程序的信息才能将其发送回连接到该适配器的其他应用程序。
Interface IDriving {
//control application
startService();
stopService();
//Events send from application
statusInfoEvent();
}
您可以将其statusInfoEvent()
视为从应用程序端发出的 Qt 信号或一些常见的可观察模式。
将传入和传出流量 API 保持在同一接口(端口)是否违反六边形模式?最重要的是,实现是在六边形内部完成的,因为它是一个驱动端口。
问题2:
将服务 1 的驱动适配器视为某种存储介质,服务 1 可以向/从其推送信息。服务 1 的这两个适配器(驱动和驱动)在服务 2 内部实现(至少在项目级别),现在服务 2 从它的驱动适配器(web 或 dbus)接收一些数据并更新服务 1 驱动适配器的存储介质,还需要通过驱动适配器通知服务1的更新。
是否有可能以更好的方式做到这一点?