Tôi khá mới đối với các khái niệm thiết kế hướng miền và tôi đã gặp phải sự cố khi trả về các câu trả lời thích hợp trong API trong khi sử dụng một lệnh có các lệnh và trình xử lý lệnh cho logic miền.Làm thế nào để lấy lại dữ liệu từ một bus lệnh?
Giả sử chúng tôi đang xây dựng một ứng dụng có phương pháp thiết kế theo miền. Chúng tôi có một phần cuối và phần trước. Mặt sau có tất cả logic miền của chúng tôi với API được hiển thị. Giao diện người dùng sử dụng API để đưa ra yêu cầu cho ứng dụng.
Chúng tôi đang xây dựng logic miền của mình bằng các lệnh và trình xử lý lệnh được ánh xạ tới một bus lệnh. Dưới thư mục Domain của chúng ta, chúng ta có một lệnh để tạo một tài nguyên bài có tên là CreatePostCommand. Nó được ánh xạ tới trình xử lý CreatePostCommandHandler của nó thông qua bus lệnh.
final class CreatePostCommand
{
private $title;
private $content;
public function __construct(string $title, string $content)
{
$this->title = $title;
$this->content= $content;
}
public function getTitle() : string
{
return $this->title;
}
public function getContent() : string
{
return $this->content;
}
}
final class CreatePostCommandHandler
{
private $postRepository;
public function __construct(PostRepository $postRepository)
{
$this->postRepository = $postRepository;
}
public function handle(Command $command)
{
$post = new Post($command->getTitle(), $command->getContent());
$this->postRepository->save($post);
}
}
Trong API của chúng tôi, chúng tôi có điểm cuối để tạo bài đăng. Điều này được định tuyến phương thức createPost trong một PostController trong thư mục Application của chúng ta.
final class PostController
{
private $commandBus;
public function __construct(CommandBus $commandBus)
{
$this->commandBus = $commandBus;
}
public function createPost($req, $resp)
{
$command = new CreatePostCommand($command->getTitle(), $command->getContent());
$this->commandBus->handle($command);
// How do we get the data of our newly created post to the response here?
return $resp;
}
}
Bây giờ trong phương thức createPost, chúng tôi muốn trả lại dữ liệu của bài đăng mới tạo trong đối tượng phản hồi để ứng dụng đầu cuối của chúng tôi có thể biết về tài nguyên mới được tạo. Điều này là phiền hà vì chúng ta biết rằng theo định nghĩa, lệnh bus không trả về bất kỳ dữ liệu nào. Vì vậy, bây giờ chúng tôi đang bị mắc kẹt ở một vị trí khó hiểu, nơi chúng tôi không biết làm thế nào để thêm bài viết mới của chúng tôi để đối tượng phản ứng.
Tôi không chắc chắn làm thế nào để tiến hành với vấn đề này từ đây, một số câu hỏi tôi suy nghĩ:
- Có một cách thanh lịch để trả lại dữ liệu của bài đăng trong phản ứng?
- Tôi có đang triển khai không chính xác mẫu Command/CommandHandler/CommandBus không?
- Đây có phải chỉ là trường hợp sử dụng sai cho mẫu Command/CommandHandler/CommandBus không?
Có thể trùng lặp của [Điều gì sẽ được trả về từ API cho lệnh CQRS?] (Http://stackoverflow.com/questions/29916468/what-should-be-returned-from-the-api-for-cqrs- lệnh) – guillaume31