php – 我们应该在子服务和父服务中注入服务参数,还是创建一个从
我有一些服务,一个,我有一些需要的变量,注入两个服务,这两个注入另一个服务,我需要使用config.yml中的参数,它在底部的构造函数中传递,进入最后的服务.
vb_logger: class: BlotBundleVBLoggerVBLogger arguments: ["@vb_members_module","@vb_posts_module"] vb_forum_functions: class: BlotBundleVBLoggerVBForumFunctions arguments: [%website%,%username%,%password%] vb_members_module: class: BlotBundleVBLoggermodulesModule_members arguments: [@vb_forum_functions] vb_posts_module: class: BlotBundleVBLoggermodulesModule_posts arguments: [@vb_forum_functions] 这是我的服务.如您所见,我在vb_forum_functions中注入%website%,%username%,%password%,我需要在vb_logger中访问它们. vb_forum_functions在vb_members_module和vb_posts_module中都被注入.然后,我在vb_logger中注入这两个 要在vb_logger中访问我的变量,我需要在vb_forum_functions中创建返回它们的方法,然后执行类似的操作 public function __construct(Module_members $module_members,Module_posts $module_posts) { $this->vbff = $module_members->getVbff(); $this->module_members = $module_members; $this->module_posts = $module_posts; } 在Module_members中创建一个方法来检索我的变量注入的vb_forum_functions. protected $vbff; public function __construct(VBForumFunctions $vbff) { $this->vbff = $vbff; } public function getVbff() { return $this->vbff; } 最后,在vb_logger中我可以得到我的变量: $this->password= $module_members->getVbff()->getPassword(); 这听起来像是很多工作和奖励方法,但比直接将参数直接注入服务更有意义,特别是因为它们已经通过注入了vb_forum_functions的两个模块类注入,这些类已经注入了变量. 替代方案是 vb_logger: class: BlotBundleVBLoggerVBLogger arguments: ["@vb_members_module","@vb_posts_module",%website%,%password%] vb_forum_functions: class: BlotBundleVBLoggerVBForumFunctions arguments: [%website%,%password%] 但同样,变量已经在两个级别以下可用,是否值得再次注入它们? 另外,如果vb_logger不使用我的模块,那么我不是以不正当的方式注入它们吗?因为他们自己也创建了一个vb_forum_functions对象,由于没有使用它也是无用的,在我只使用一个模块的情况下.即便如此,我可以通过其中一个模块访问此对象,因此另一个不必将其注入vb_logger. 简而言之: >如何将服务的变量(vb_forum_functions)访问到 解决方法
通过存储与一个服务无关的信息并将其发布以供另一个服务使用,您正在减少这些服务的封装并增加它们的紧密耦合.
例如,将来如果您将父服务更改为不再需要注入的东西,那么您将无法删除它而不会更改从外部访问它的所有内容. 如果某些事情与服务的核心责任无关,那么一般来说添加它(单一责任原则)是一个坏主意,除非不这样做的开销很大. 在这种情况下,只需将东西注入您需要的地方并保持接口清洁. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |