我看到正确的express node应用程序有三层结构:
- 组网/路由控制
- 应用/服务
- 资料储存
但我不确定如何将其应用于Web套接字(特别是在TypeScript Node中使用Socket.io库)。
想象一个实时多人游戏。从客户端到服务器的套接字事件显然会像典型的REST服务器一样,在控制器层被拦截和处理,然后传递到应用程序层,使游戏引擎产生相应的效果。
但考虑到它是实时多人游戏,游戏引擎还需要能够主动与客户端联系,以通知他们游戏更新。这意味着Web Socket组件(处理程序的设置,对套接字相关函数的调用......)也需要存在于应用层。
为了避免在网络层和应用层都放置web-socket的东西,我目前的想法是在网络层和应用层之间创建一个网关抽象,负责允许网络层访问应用层组件,并允许应用层访问网络层组件。所有的Web Socket功能/类都存在于网络级。
任何更正,解释,示例和设计模式将不胜感激。
1条答案
按热度按时间ve7v8dk21#
首先,Clean Architecture传统上分为4层,而不是3层:
x1c 0d1x的数据
因此,由于您没有为3层提供实际的依赖关系图,因此您似乎拥有更多的传统3层架构。
无论哪种方式,对于清洁架构和您定义的层,将Web套接字放在最外层并以某种方式将其注入相应的服务/应用程序都更有意义,即。遵循标准DI/IoC模式。
不熟悉Node/TypeScript,所以不能推荐最合适的/惯用的技术,但总体思路是定义一些合约(接口),让我们称之为“通知程序”,并在构建过程中将其实现传递给相应的应用程序/服务(合约/接口可以在应用程序/服务层定义,实现在网络/路由控制层)。这将提供这种方法的标准好处-将逻辑从实现和使用的框架中分离出来(例如,您可以为单元测试注入测试实现,或者更改通知的其他机制-也许将来您会想要引入中间消息总线或类似的东西)。