【发布时间】:2015-05-14 07:33:56
【问题描述】:
我有一个问题:我需要为应用程序中的每个对象配置我的 DI/IoC 容器还是只配置工厂?
现在我有这样的东西:
'serviceFactory' => function() use ($container) {
return new \Application\Core\Factory\ServiceFactory($container->get('entityFactory'), $container->get('repositoryFactory'), $container->get('cache'), $container->get('file'), $container->get('image'));
},
'repositoryFactory' => function() use ($container) {
return new \Application\Core\Factory\RepositoryFactory($container->get('database'), $container->get('queryBuilder'), $container->get('mapper'), $container->get('language'));
},
'entityFactory' => function() use ($container) {
return new \Application\Core\Factory\EntityFactory($container->get('language'));
},
然后,应用程序将不必要的对象加载到其他不需要的对象中。
示例:在 BlogService 中,我不使用 File 类或 Image 类。在 ThumbnailService 中我这样做了,但我没有在其中使用 Entity 或 Repository。
那么,我是否需要在我的 DI/IoC 容器中导入一些延迟加载,或者我需要像这样编写每个实体/存储库/服务/控制器连接:
'blogController' => function() use ($container) {
return new \Application\Controller\BlogController($container->get('blogService'));
},
'blogService' => function() use ($container) {
return new \Application\Service\BlogService($container->get('blog'), $container->get('categoryEntity'), $container->get('blogRepository'), $container->get('cache'));
},
'blogRepository' => function() use ($container) {
return new \Application\Model\Repository\BlogRepository($container->get('database'), $container->get('queryBuilder'), $container->get('mapper'), $container->get('language'));
},
'blog' => function() use ($container) {
return new \Application\Model\Entity\Blog($container->get('language'));
},
'thumbnailService' => function() use ($container) {
return new \Application\Service\ThumbnailService($container->get('image'), $container->get('file'));
},
但这样我可能会编写所有 50-100 个实体、存储库、服务和控制器,可能会过度优化?
有什么建议吗?
【问题讨论】:
标签: php dependency-injection ioc-container