В моем домене у меня есть следующие сценарии: Учитель может создать задание, а учащийся может загрузить и загрузить только один файл для каждого задания.
Следовательно, в контексте назначения у меня есть 2 модуля: назначение и файл, потому что я не обнаружил, что какое-либо правило для этого объекта должно вмешиваться в другое. Так что для каждого агрегата у меня будет один репозиторий, который его представляет. Тогда у меня будет что-то вроде этого:
- WriteModel / Модуль / Ассигмент / [приложение, домен, инфраструктура]
- 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, но я не уверен ...