在全球范围内,我们都同意说循环(或相互)依赖是糟糕的OOP设计。
所以,这是一个我经常遇到的情况,我被迫处理相互依赖的服务。
想象一下UserManager,它处理用户的注册和删除。 一个ForumManager,用于处理发送和删除后的内容。
ForumManager依赖于UserManager,因为在发送帖子时,服务必须从UserManager获取一些信息。 可能看起来糟糕的设计将是UserManager,取决于ForumManager,因为如果我们想象我们的代码库是分层的,UserManager是我们构建论坛的基础层(使用ForumManager)。
但是抓住这个问题,当删除用户时,UserManager必须告诉ForumManager删除所有用户帖子,所以...... UserManager现在依赖于ForumManager,我们得到了循环/相互依赖。
我经常通过在UserManager中注入服务容器来解决这个问题,而且我告诉自己UserManager并不真正依赖于ForumManager,它使用服务容器延迟加载它,但实际上它确实是如果未删除帖子,则UserManager无法正常工作的依赖关系。因此,我们无法在没有ForumManager的情况下正确使用UserManager,反之亦然,它是一个循环/相互依赖...而且它似乎是糟糕的设计。
你的观点是什么?
谢谢。
编辑: 我正在考虑通过使用事件来解决这个问题。 UserManager不应该知道删除用户应该删除帖子,因为它不知道论坛存在。所以,相反,我们的想法是只发送一个" UserRemovalEvent" ForumManager听,并且自己决定对应于从该用户删除帖子。 这种方法很好,不是吗?
答案 0 :(得分:0)
可能有用的是使用第三个'经理',例如经理。
ForumManager依赖于UserManager。但是,帖子本身存储在PostManager中。
删除用户时,UserManager会告诉PostManager删除帖子。
摘要:不是有循环依赖,而是取出导致它的部分,并创建一个新的(较小的)'Manager'来删除循环依赖。