CQRS читать модель - PullRequest
       10

CQRS читать модель

0 голосов
/ 07 ноября 2018

В моем домене у меня есть следующие сценарии: Учитель может создать задание, а учащийся может загрузить и загрузить только один файл для каждого задания.

Следовательно, в контексте назначения у меня есть 2 модуля: назначение и файл, потому что я не обнаружил, что какое-либо правило для этого объекта должно вмешиваться в другое. Так что для каждого агрегата у меня будет один репозиторий, который его представляет. Тогда у меня будет что-то вроде этого:

  1. WriteModel / Модуль / Ассигмент / [приложение, домен, инфраструктура]
  2. WriteModel / Модуль / файл / [приложение, домен, инфраструктура]

Пока у меня нет проблем. Для моей модели чтения мне нужно это:

//Action: check if the assigment was already created
//Query: get only assigment by assignment id

//Action: update the assigment
//Query: get only assigment by assignment id

//Action: delete student file
//Query: get only file by file id

//update student name
//Query: get only file by student id

здесь я не знаю, как создать модель для моего взгляда. Я думал таким образом: создать один модуль (назначение) и сохранить там все сущности (DTO) с двумя хранилищами? Я сказал 2 репозитория, потому что иногда мне нужен только файл.

ReadModel/Module/assigment/domain/assigmentRM.php
ReadModel/Module/assigment/domain/FileRM.php
ReadModel/Module/assigment/domain/AssignmentRepositoryInterface.php
ReadModel/Module/assigment/domain/FileRepositoryInterface.php


final class AssignmentRM
{
    private $id;
    private $title;
    private $description;
    private $videoLink;
    private $files;
    private $createdAt;
    private $updatedAt;

    private function __construct(
        string $id,
        string $title,
        string $description,
        string $videoLink,
        string $files,
        string $createdAt,
        string $updatedAt
    ) {
        $this->id = $id;
        $this->title = $title;
        $this->description = $description;
        $this->videoLink = $videoLink;
        $this->files = $files;
        $this->createdAt = $createdAt;
        $this->updatedAt = $updatedAt;
    }
}


final class FileRM
{
    private $id;
    private $fileName;
    private $studentId;
    private $studentName;
    private $assigmentId;
    private $createdAt;
    private $updateAt;
}


final class AssignmentRepositoryInterface
{
    findById();
}


final class FileRepositoryInterface
{
    findByFileId();
    findByStudentId();
}

Как вы думаете, этот подход хорош? Дело в том, что в WriteModel каждый объект находится в другом модуле, но в ReadModel все объекты находятся в одном модуле (назначение). Для меня это нормально, потому что WriteModel может отличаться от ReadModel, но я не уверен ...

...