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