Я пытаюсь эффективно работать с DDD и Doctrine2 по проекту с большим количеством бизнес-логики.DDD, Doctrine2, Aggregates и ArrayCollection: как изолировать модель домена?
Это довольно ново для меня, я читаю много статей и примеров кода, чтобы понять основные принципы и методы DDD.
Я понимаю, что нам нужно отвязать домен объекты из других понятий, связанных с системой, т.е. в многоуровневой архитектуре, «домен слой» должен быть изолировать от других слоев, как сохранение слоя/услуги (Doctrine2 для меня).
Но есть одна вещь, которую трудно понять, для меня: в нескольких примерах кода ДДД с doctrine2, агрегаты в предприятия области управляются с Doctrine ArrayCollection, я нашел такой код:
namespace Acme\Domain\Model\Users;
use Doctrine\Common\Collections\ArrayCollection;
class User{
//...
/**
* Collection of Roles
*
* @var Collection of Roles
*/
protected $roles;
/**
* Constructor.
*/
public function __construct()
{
$this->createdAt = new \DateTime();
$this->roles = new ArrayCollection();
}
public function getRoles()
{
return $this->roles;
}
//...
}
Для меня эта реализация создает связь между моделями доменов и службой непрерывности, Doctrine2.
С другой стороны, если классы DDD Entity и Doctrine Entity разделены, то, по моему мнению, для многих слоев/классов существует. Как вы думаете? Есть ли лучший способ избежать этого?
Вы упомянули «много бизнес-логики». Подумайте о том, чтобы начать новый вопрос, посвященный только одному бизнес-правилу, которое, по вашему мнению, может принести пользу от DDD. – Cerad