# 2.3:客户端架构设计

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!

# 一、前言

在设计客户端的架构之前,我们先思考下我们的目标以及目前已经完成的内容。好!那么你是否还能记得我们最开始设计 UI 组件包的时候,就已经反复提到要将我们的 UI 与业务进行分离,不要将业务流程代码写到 UI 窗口里去。否则你的代码将越来越难以为维护,每新增加一个功能都将会让你从很多的代码中“贴膏药”似的补来补去。

UI 方面:我们已经完成了 UI 包的开发,并使用 Maven 进行打包对外提供 Jar 包,调用方可以使用 UI 的接口控制页面展示,同时可以实现事件接口类信息,对页面发起的行为进行处理。

通信方面:我们对 Netty 做了案例练习,知道了一个简单字符串在服务端与客户端的发送,也尝试了发送对象信息。同时在设计服务端架构后,我们设计了通信协议包。所以在这里客户端将协议包集成到 Netty 客户端中即可开始开发业务功能。

那么!接下来我们开始设计客户端的架构模型。

# 二、架构模型

  • UI 层:在 UI 层我们使用工程 itstack-naive-chat-ui 对外部提供的 Jar 包,并使用内部的接口、事件来操作 UI 的展现和行为发起。如果还不是特别理解也没关系,因为在后续我们的代码开发中会有落地的展现内容。这也是我们反复强调的要让 UI 与业务逻辑代码分开。

  • 业务层:对于通信客户端的核心业务功能来说,主要负责窗体中用户信息的维护 (好友、群组) 以及用户和群组之间进行对话信息发送和接收操作。最终也就是在这一层来处理 UI 的接口与事件。

  • 协议包:在“通信协议包定义”中,我们已经明确将了数据帧的作用,以及需要在中间穿插一位 标识帧,用来区分发送的是不同的对象。其实这里不同的对象就是我们的不同业务,例如;登录、对话框获取、消息发送、添加好友等等,这些与我们的 UI 窗体中的流程息息相关。

  • 通信层:在 Netty 的框架下,可以非常方便的让我们使用 Socket 通信服务,只要更加注重业务开发即可。当然如果是工作中需要,并且还是初步了解 Netty,那么一定还是需要在这方面的知识上有所深入学习的。

  • 运行环境:最下面是我们的运行环境,Jdk1.8,Windows 桌面即可运行。也可以运行在其他安装 jdk1.8 的系统上。