想象一下我们正在使用一些依赖注入,并且在某些控制器中使用它。
例如Laravel或任何其他具有DI的框架(在这种情况下,语言与PHP无关)。
假设我们有这个控制器:
class UserController extends Controller
{
public function __construct(UserRepository $users, Mailer $mailer, Logger $logger)
{
$this->users = $users;
$this->mailer = $mailer;
$this->logger = $logger;
}
public function method1(){...}
public function method2(){...}
public function index(UserRepository $users){...}
}
每个人都说这是很好的设计,但是我的问题是:
例如,如果控制器调用 method1 并且仅使用 mailer ,那么构造具有所有3个依赖项的对象的意义何在?即使不占用大量内存或性能,这也不是最佳选择吗?
有人可以认为此控制器需要所有这些控制器,但实际上,如果我仅调用 method1 ,则只需使用 mailer 。
>如果我尝试对诸如“ index”方法之类的方法注入依赖项,那该怎么办,因为如果我扩展相同的方法并需要不同的依赖项,PHP将因方法签名不同而崩溃。
处理此问题的最佳方法是什么。
如果将每个方法提取到单独的控制器中,则必须重复很多次。
谢谢
答案 0 :(得分:1)
有几件事要考虑:
UserController
)通常是违反SRP的原因。相反,更好的解决方案通常是围绕功能对类进行分组。例如DeleteUserController
,PromoteUserController
,BlockUserController
等