将电子邮件发送到何处?

时间:2016-12-16 09:50:54

标签: php email orm single-responsibility-principle

有一个“新闻”系统,当添加“新”时,也应该发送一封电子邮件。

class ModelNews extends NewsORM
{
    public function add ($new)
    {
        INSERT INTO newstable
    }
}

但我还需要发送电子邮件,所以:

class ModelNews extends NewsORM
{
    public function add ($new)
    {
        INSERT INTO newstable
        mail->send
    }
}

但看起来很奇怪。看起来违反了SRP

3 个答案:

答案 0 :(得分:2)

您可以编写一个侦听器/调度程序,可以在数据库中查找新记录,然后发送电子邮件。

public interface PrestaShopClient {

@GET("customers/{id}?output_format=JSON")
Call<Customer> getCustomer(@Path("id") int id);

因此没有违反SRP

答案 1 :(得分:1)

创建一个新的sendEmail函数并将代码放在那里。

当你需要它时。在整个应用程序中调用它。

答案 2 :(得分:1)

  

看起来违反了SRP

确实如此。当您需要做多件事时,您可以应用开放/封闭原则并将所有内容分离。

interface AddNews
{
    public function add($new);
}

class SaveNews extends NewsORM implements AddNews
{
    public function add($new)
    {
        // INSERT INTO newstable
    }
}

class SendNews extends NewsORM implements AddNews
{
    public function add ($new)
    {
        //mail->send
    }
}

class AggregatorNews implements AddNews
{ 
    private $news = []; 

    public function addNews(AddNews $news)
    { 
        $this->news[] = $news; 
    } 

    public function add($new)
    { 
        foreach ($this->news as $obj) { 
            $obj->add($new); 
        } 
    } 
} 

然后你可以像这样使用它:

$news = new AggregatorNews();
$news->addNews(new SaveNews);
$news->addNews(new SendNews);

$news->add('bla bla');