将大型“单片”课程分解为较小的课程的最佳方法是什么?
我设计了一个简单的聊天系统,其中包含User
个对象和Channel
个对象,用户可以在多个频道中进行对话。
这是我的设计图:
我对这个设计的主要问题是ChatManager
类有点单一,即它做了太多事情。在之前的版本中,它还处理了频道成员资格,现已分离到ChannelMembershipManager
。
“简化”ChatManager
课程的最佳方法是什么?我的设计是否还有其他问题我没有看到?
答案 0 :(得分:2)
我认为不需要"经理" class,虽然我做看到需要跟踪Channel
类的所有实例以及User
类的所有实例。 也许这可以通过每个类中的类静态来完成。 (这些索引可以使用限定符在UML中建模,它类似于哈希映射。Channels
和Users
甚至不需要数字!这些数字只是编码这个问题的众多方法之一。
User
类的每个实例都可以使用命令通道与人进行通信。当一个人要求User
类的实例加入一个频道时,它可以创建一个Private Channel
的实例来管理一个人私有的每个频道的套接字,然后询问一个实例请求的Channel
获得接受许可。 Private Channel
可以包含poll()
,read()
和write()
的方法。
当Channel
加入或离开时,User
类的实例可以负责宣布事情。 Channel
类的每个实例都应负责轮询连接的Private Channel
实例,阅读消息/命令以及采取措施,例如向所有其他Private Channels
重复消息。< / p>
这只是我的头脑。如果我花了一些时间来考虑它,我可能会看到一些潜在的问题或优化我可以做,但希望这会给你一些关于如何分裂经理的想法。根据OO原则,monolith。