根据面向对象原则,打破单体管理器的最佳方式是将职责分配给类。以下是一些立即想到的建议。不要指望完美,这只是我的头顶。
我认为没有必要为“经理”级,虽然我做认为有必要跟踪Channel
类的所有实例和User
类的所有实例。 也许这可以通过每个类中的类静态来完成。 (这些指标可以在UML用预选赛,这工作有点像哈希地图。该Channels
和Users
真的甚至不需要数字建模!这些数字仅仅是许多方法来编写这一个。
每User
类的实例可以使用命令通道与某个人进行通信当一个人要求User
类的实例加入一个通道时,它可以创建一个Private Channel
的实例,该实例管理一个专用于每个通道的套接字一个人,然后询问要求的Channel
的实例是否允许接受它。那Private Channel
可能有方法到poll()
,read()
和write()
。
当User
加入或离开时,Channel
类的实例应负责通知事情。 Channel
类的每个实例都应负责轮询所连接的Private Channel
实例,读取消息/命令并采取措施,例如将消息重复发送给所有其他的Private Channels
。
这只是我的头顶。如果我花了一些时间思考这个问题,我可能会看到一些潜在的问题或者我可以做出的优化,但是希望这可以为您提供一些关于如何根据面向对象原则拆分“管理器”庞然大物的想法。
似乎是合理的。顶级经理班往往有点丑陋。 –
是的,我在reddit上问了一下,很遗憾得到了同样的回应。我只是希望能有些事情可以整理一下。 –
图中没有什么明显的错误。编码并寻找重构机会。 –