MyChat,一个私有的“微信“

2021-03-02 14:37:17 浏览数 (1)

星尘的一个朋友

不要抱怨、坚持下去?。

MyChat

我希望它是一个简单的沟通工具。使用简单的,开发简单的私有的,或可发展成企业级的聊天系统或是组件。但是,越是看起来简单,它的内部就越复杂。这个复杂不是指它的开发难度,而是设计。

之前有人问我(面试官),你说设计模式可以让开发变得容易,又说使用设计模式会让程序变得复杂,这不是自相矛盾吗?我的回答是“如果你只创建一个对象还用工厂模式,那肯定是复杂了,但如果你想扩展你的对象创建,那他就不复杂。因为你开发一次,受用多次,算是一劳永逸了。”

这次 MyChat 的设计,推翻了几次,至少现在我仍不满意,但它确确实实已经做到了一定的扩展性,比如新增一个 UI 功能,我有为其考虑使用的 模板方法模式, 比如你想新增一种消息类型,我在 SDK 包中的监听器可以轻松应对,这些都已经在我迭代的过程中体现出来了。

MyChat 由来

做这个项目的原因和契机有很多,说两个比较关键的。

一是因为一个叫傅政委的男人,关于这个人(https://bugstack.cn/),以后再说,要讲的东西有点多,一篇写不下。

二是对自己一个交代吧,把自己对软件设计的理解,在这个行业的所学所得,还有自认为良好的编码习惯都倾注到这个项目上。如果以后你有机会能够看到 MyChat 项目源码,也希望能评价一番,好的坏的,我都接受。我多么希望有一个能指导自己的人。

MyChat 项目介绍

该项目适合 netty 学习者或进行 IM 相关系统开发者。可以基于该项目快速开发出一个带有通讯能力的应用。

UI 采用的 JavaFx ,了解过 JavaFx 的人都知道这东西在国内的文档表现,为使得页面开发便捷,专门为其开发了一些轮子,比如 FxmlObject ,让你可以轻松的来操作 fxml 文件对象。实现布局的快速调整,功能的快速迭代。

前端程序准备了 mychat-client 客户端模块 SDK(java语言) ,给你提供足够的 API,将前端开发的权利全都交给你。也就是说,你可以使用任何开发方案,不过要考虑集成问题,因为 JavaFx 可以直接调用 java 程序,所以我这没有集成问题。

后端可以自己部署(开源以后),也可以使用 mychat 云(暂未开放)。

应用部分截图

问题记录

开发 MyChat 遇到了很多问题,这里列举一些随手记的问题和大家分享一下,有的已经解决,有的在该项目中仍然存在.

解决的问题在 MyChat 后续相关文章中会给出我的解决方案.可以关注我一起交流学习.

UI 问题

  1. stage 选择无边框模式后, 页面的拖拽. 缩放问题;
  2. listview 空数据鼠标悬停背景色问题;
  3. 节点边距问题;
  4. listview 鼠标点击,但不选中. 朋友页面使用 listview 实现, 标题也为 listcell 但可点击,不可选中;
  5. sketch 文本过长,显示问题;
  6. 页面关闭问题, 关闭后断开连接并结束进程;
  7. 如何让某个页面置顶, 不可失去焦点?;
  8. 滚动条样式问题;
  9. 滚动条如何处理不占位置;
  10. 群头像如何生成?
  11. 聊天内容如何跟着主页面的缩放进行缩放?
  12. 聊天内容的文本域如何动态调整宽高?使文本合理的展示? (难搞)
  13. javaFx 的边框?边距?背景?

功能问题

  1. 现在 UI 数据都存在缓存中,重启应用后消失,这部分数据如何处理?
  2. 后端哪些数据需要持久化?
  3. 怎么能提高程序的扩展性,增加一类消息时很简单?
  4. UI 客户端没有使用 spring , 应用中使用的 bean 如何管理?
  5. 哪些内容需要做成配置?如何做?
  6. 本地存储使用序列化方式保存Java bean, 但要存储的对象没有实现序列化接口(组件中的类),如何存储.
  7. 离线消息如何处理?
  8. 心跳机制实现时, 出现偶发空闲检测事件.

欢迎关注我,关注 MyChat。可以扫描下面二维码关注。

0 人点赞