依赖注入,是否可以注入"包装器"宾语?

时间:2017-05-20 09:09:48

标签: php dependency-injection

我有一个包装类,用于获取电子邮件模板:

class Email
{
    public function getWellcome()
    {
        return 'body';
    }

    public function getRegistration()
    {
        return 'body';
    }

    public function getCommentSent()
    {
        return 'body';
    }
}

对于我的班级来说,通过它很容易:

class User
{
    private $email;

    public function __construct($email)
    {
        $this->email = $email;
    }

    public function asd()
    {
        $m = $this->email->getRegistration();
        MailHandler::send($m);
    }
}

new User(new Email());

但我觉得有些违反了LoD。如果我像那样重构它会怎么样:

class User
{
    private $registrationEmail;

    public function __construct($registrationEmail)
    {
        $this->registrationEmail= $registrationEmail;
    }

    public function asd()
    {
        $m = $this->registrationEmail;
        MailHandler::send($m);
    }
}

new User(new Email()->getRegistration());

这看起来好一点,但我需要逐个注入所有必要的对象,更不用说如果我需要遍历所有电子邮件呢?哪种方式更可取?

1 个答案:

答案 0 :(得分:1)

我的方式看起来像这样:

$user = new User;
$user->asd(new Template('/path/to/registration/template.html.twig'));

在我看来,你有两个问题:

  • Email类有多种原因需要改变(并且似乎贴错标签)
  • 您的User班级有依赖关系,大部分时间实际上并不需要
  

<强> P.S。
  我并非完全相信,您的User班级应负责发送注册确认电子邮件。