之前写的一个桌面聊天软件的项目总结

 这个项目时一个是仿QQ的聊天系统,运用了qt4+sqlite实现,采用MVC架构,运用TCP/IP协议,没有用UNP。

一.项目介绍:
 项目分为两个部分,服务器端和客户端。
 服务器端:
 1.首先服务器端的核心是一个主服务器类(位于Model层),它维护一个在线用户的账号列表和一个在线用户的邮箱列表,列表中存储的是已连接用户的socket。客户端在登陆或退出时服务器会相应地在列表中添加或删除socket。主服务器类通过客户端发来的请求前面的消息类型字段来识别并处理不同的业务逻辑。(此处代码采用了一个巨大的switch语句来实现,不利于功能模块直接的解耦,是一个要改进的地方。后续可以把同种类型的请求放到一个工厂类中处理,工厂类生成具体的函数对象对客户端请求进行处理)
 2.有些客户端请求,比如登陆,修改密码,获取好友信息等需要服务器与数据库进行交互,而与数据库的交互是通过数据库操作类(位于Control层)来完成的,数据库操作类把不同的数据库封装成独立的函数。
服务器端端的数据库表有用户信息表,群信息表,讨论组信息表,历史信息表,离线信息表,好友表,群表,讨论组表,邮件表)
 3.服务器端还有一个与客户端通信的socket类,继承自QTcpSocket,用来表示单个tcp连接。当它准备好读的时候,会调用函数读取请求的消息类型字段以及一些后续要处理的数据,然后发送一个信号。这个信号在TcpServer被初始化时绑定到TcpServer的一个槽函数,所以TcpServer会捕获这个信号,并调用绑定的槽函数根据不同的请求类型来处理不同的请求。
 客户端:
 1.客户端主要包括一些界面代码以及界面上按钮和右键菜单的功能实现
 2.这些界面包括登陆界面,用户主界面,用户聊天界面,群聊天界面,讨论组聊天界面,邮件界面,文件收发界面等等。每个界面上还有功能按钮和右键菜单,具体参考QQ的聊天的界面。
 3.上述页面的业务逻辑都通过Control层的相关控制类(可能要通过操作数据库操作类)来完成。比如登陆控制类负责登陆,保存账号密码,自动登陆的业务逻辑实现。注册控制类负责注册的业务逻辑实现。文件控制类负责文件传送和文件接收的业务逻辑实现。邮件控制类负责发送邮件和接收文件的业务逻辑实现。数据库操作类负责与数据库交互的业务逻辑。主控制类负责聊天,好友状态,修改用户信息等等其他业务逻辑(这个类的业务太过繁杂,应该把业务逻辑按类型再分类成一个个小的控制类,降低功能模块间的耦合)

二.项目存在的不足
 1.这个项目中很多地方都没有遵循MVC架构的原则:比如很多控制类都直接地与底层打交道(比如数据库控制类),应该在model层再定义一层与数据库进行直接交互,而数据库控制类只调用Model层的方法。又比如很多view层的界面类都直接在类中生成视图或者绘制部件,正确的做法应该时由Control层的相关控制类绘制好视图再根据业务逻辑返回对应页面给VIEW层中的类。又比如位于Model层中的主服务器类就处理了太多的业务逻辑,正确的做法应该是把业务逻辑放到Control层中进行分发。
 2.如上面的项目介绍时所说,项目中的很多类的解耦做得不好。很多主要的业务逻辑都堆积在一个巨大switch块中,导致不同的功能模块之间紧密耦合。一个可行的改进方法是可以把同种类型的请求放到一个工厂类中处理,工厂类生成具体的函数对象对客户端请求进行处理
 3.这个项目虽然代码量挺大的,不过运用的技术都很简单,很多业务逻辑的实现都大同小异,基本上就是调用API来完成,没有用到什么比较有技巧性的技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值