Использовать соединение внутри сущности

Я действительно не знаю, как назвать этот подход, но вопрос в том, можно ли делать что-то подобное. Я создаю сущность Messages и устанавливаю Connection внутри этой сущности.

<?php

class Message {
   private $connection;

   public function setName();
   public function setSubject();

   public function send()
   {
       $this->connection->send($this);
   }
}

Это выглядит как нарушение принципа единой ответственности.

У меня есть служба Mailer, которая может создать сущность Message (уже с Connection внутри). Также Mailer может отправлять Message объект сам по себе.

И есть два варианта, как я могу его использовать;

<?php
// First
$mailer->send($message);

// Second
$message->send();

Разве это не нормально, и я должен использовать только первый подход?


person Mikhail Stroev    schedule 28.11.2018    source источник
comment
Сообщения сами не отправляются.   -  person tereško    schedule 28.11.2018


Ответы (1)


Ответ на этот вопрос сильно зависит от того, насколько вы приверженец различных архитектурных лагерей (DDD по сравнению с моделью анемичной области). Если вы являетесь приверженцем DDD, вы, вероятно, будете выступать за то, чтобы сообщение могло отправляться само по себе, что позволило бы ему делать всевозможные вещи, такие как проверка собственного состояния, изменение этого состояния на основе результата отправки и т. д. Если вы используя тонкую / анемичную модель предметной области, вы сделаете сообщение немым и полагаетесь на службу для отправки сообщения.

У каждого пути есть компромиссы, вы должны выяснить, какой из них подходит для вашего приложения, и придерживаться его. Их смешивание превращает ваше приложение в беспорядок.

person Rob Conklin    schedule 28.11.2018