ddd-cqrs-example icon indicating copy to clipboard operation
ddd-cqrs-example copied to clipboard

Separate the domain model and persistence layer

Open mohammadhsn opened this issue 3 years ago • 0 comments

Hi,

I have a design-related question, As I know about DDD and some sources I read, most people indicate separations between domain and persistence (or infrastructure in general). Most people use Doctrine ORM when they consider the DDD approach in PHP, domain models (or Entities) are a part of domain, so they have no idea about persistence.

Let's imagine we have an Author domain model that publishes posts, I thought below code:

class Post
{
    public function __construct(
        protected Author $author,
        protected PostTitle $title,
        protected PostContent $content,
        protected DateTimeImmutable $publishedAt
    ) {}
}

class Author
{
    public function __construct(
        protected AuthorEmail $email,
        protected array $posts = []
    ) {}

    public function publishNewPost(Post $post)
    {
        $this->posts []= $posts;
    }
}

I fact, what I want is I could use the Post and Author classes as domain models without any persistence concern (doctrine annotations/ArrayCollection class/...). I'd like to separate Doctrine's entity from domain models and I don't know what should I do. Could you help me, please?

mohammadhsn avatar Jun 17 '21 21:06 mohammadhsn