将大的 "monolithic" class 分成小的

Breaking up a large "monolithic" class into smaller ones

将大的 "monolithic" class 分成小的最好的方法是什么?

我设计了一个简单的聊天系统,其中包含 User 个对象和 Channel 个对象,用户可以在多个频道中聊天。

这是我的设计图:

我对这个设计的主要问题是 ChatManager class 有点单一,即它做了太多事情。在之前的版本中,它还处理频道成员资格,现在已分离到 ChannelMembershipManager.

关于 "simplifying" 我的 ChatManager class 的最佳方法是什么?我的设计还有其他我没有发现的问题吗?

根据 OO 原则,打破单一管理器的最佳方式是将职责分配给 classes。这里有一些立即浮现在脑海中的建议。不要期望完美,这只是我的想法。

我认为不需要 "Manager" class,尽管我 认为需要跟踪 Channel 的所有实例class 和 User class 的所有实例。 也许 这可以通过每个 class 中的 class 静力学来完成。 (这些索引可以使用 qualifiers 在 UML 中建模,其工作有点像哈希映射。ChannelsUsers 真的甚至不需要数字!那些数字只是众多编码方式之一。

Userclass的每个实例都可以使用命令通道与人交流。当一个人请求 User class 的实例加入频道时,它可以创建一个 Private Channel 的实例来管理一个人私有的每个频道套接字,然后向请求的 Channel 的实例请求接受它的许可。 Private Channel 可以有 poll()read()write() 的方法。

Channel class 的一个实例应该负责在 User 加入或离开时通知事情。 Channel class 的每个实例应负责轮询连接的 Private Channel 个实例,读取消息/命令,并采取行动,例如向所有其他 [=26] 重复消息=].

这只是我的头脑。如果我花一些时间考虑它,我可能会发现一些潜在的问题或我可以做的优化,但希望这能给你一些关于如何根据 OO 原则拆分 "manager" 单体的想法。