将一个大型的“单片”类分解为较小的类

时间:2016-05-14 19:19:06

标签: oop uml structure

将大型“单片”课程分解为较小的课程的最佳方法是什么?

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

这是我的设计图:

UML chat design diagram

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

“简化”ChatManager课程的最佳方法是什么?我的设计是否还有其他问题我没有看到?

1 个答案:

答案 0 :(得分:2)

根据OO的原则,打破这个单一经理的最好办法就是将责任分配给班级。以下是一些立即浮现的建议。不要期待完美,这只是我的头脑。

我认为不需要"经理" class,虽然我看到需要跟踪Channel类的所有实例以及User类的所有实例。 也许这可以通过每个类中的类静态来完成。 (这些索引可以使用限定符在UML中建模,它类似于哈希映射。ChannelsUsers甚至不需要数字!这些数字只是编码这个问题的众多方法之一。

User类的每个实例都可以使用命令通道与人进行通信。当一个人要求User类的实例加入一个频道时,它可以创建一个Private Channel的实例来管理一个人私有的每个频道的套接字,然后询问一个实例请求的Channel获得接受许可。 Private Channel可以包含poll()read()write()的方法。

Channel加入或离开时,User类的实例可以负责宣布事情。 Channel类的每个实例都应负责轮询连接的Private Channel实例,阅读消息/命令以及采取措施,例如向所有其他Private Channels重复消息。< / p>

这只是我的头脑。如果我花了一些时间来考虑它,我可能会看到一些潜在的问题或优化我可以做,但希望这会给你一些关于如何分裂经理的想法。根据OO原则,monolith。