有一个“新闻”系统,当添加“新”时,也应该发送一封电子邮件。
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
答案 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');