MyChat,一个私有的“微信“

星尘的一个朋友

不要抱怨、坚持下去💪。

MyChat

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

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单的可以显示界面的代码,使用了Swing库来实现: ```java import javax.swing.*; import java.awt.*; public class MyChat extends JFrame { public MyChat() { setDefaultCloseOperation(EXIT_ON_CLOSE); setTitle("My Chat"); setSize(800, 600); // 创建聊天区域 JTextArea chatArea = new JTextArea(); chatArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(chatArea); // 创建输入框和发送按钮 JTextField inputField = new JTextField(); inputField.setPreferredSize(new Dimension(600, 30)); JButton sendButton = new JButton("发送"); sendButton.setPreferredSize(new Dimension(100, 30)); sendButton.addActionListener(e -> { String message = inputField.getText(); chatArea.append(message + "\n"); inputField.setText(""); }); // 将聊天区域、输入框和发送按钮添加到容器中 Container contentPane = getContentPane(); contentPane.add(scrollPane, BorderLayout.CENTER); JPanel panel = new JPanel(new FlowLayout()); panel.add(inputField); panel.add(sendButton); contentPane.add(panel, BorderLayout.SOUTH); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { MyChat chat = new MyChat(); chat.setVisible(true); }); } } ``` 这个代码创建了一个简单的聊天窗口,包含一个聊天区域、一个输入框和一个发送按钮。当点击发送按钮时,会将输入框中的内容添加到聊天区域中。 这个代码使用了Swing库来创建界面,并通过JFrame类来实现一个窗口。在构造函数中,首先设置了窗口的标题和大小,并创建了聊天区域、输入框和发送按钮。然后将它们添加到容器中,并设置了布局方式。 在主函数中,使用了SwingUtilities.invokeLater()方法来启动一个新线程,并在其中创建并显示聊天窗口。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值