Where to put the email sending?

John Smith

There is a "news" system, when a "new" is added, an email should be sent too.

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

but I also need to send an email, so:

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

but it looks odd. It looks like SRP is violated

Federkun

It looks like SRP is violated

It does indeed. When you need to do multiple things you can apply the open/closed principle and decouple everything.

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); 
        } 
    } 
} 

Then you can use it like this:

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

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

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related