Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将电子邮件发送到哪里?_Php_Email_Orm_Single Responsibility Principle - Fatal编程技术网

Php 将电子邮件发送到哪里?

Php 将电子邮件发送到哪里?,php,email,orm,single-responsibility-principle,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 n

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

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被违反了

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


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

创建一个新的sendEmail功能并将代码放在那里

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

看起来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');
看起来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');

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

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

class SendNews extends NewsListener
{
     public function listen($news) {
        mail-> send
     }
}

因此,不会违反SRP

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

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

class SendNews extends NewsListener
{
     public function listen($news) {
        mail-> send
     }
}

因此,SRP未被违反

是否应该在控制器中而不是模型中进行管理?如果($model->add($new))$mail->send();但是一条新的“新闻”可以从任何地方添加,这样我就应该随时给控制器打电话。那不行也许应该在控制器而不是模型中管理?如果($model->add($new))$mail->send();但是一条新的“新闻”可以从任何地方添加,这样我就应该随时给控制器打电话。那是行不通的,为什么不干脆扩展ORM呢?为什么要将它们添加到列表中?为什么不简单地扩展ORM?为什么要将它们添加到列表中?但是封装确实:)违反了封装。见:我同意。只要核心国家不被修改,就不会造成伤害。但是,我会让实现者选择一个原则,即愿意违反:-)但封装确实违反:-)封装违反。见:我同意。只要核心国家不被修改,就不会造成伤害。但是,我会让实施者选择自己愿意违反的原则:-)