2

Я собираюсь начать новый проект с помощью CQS (как один из аспектов его дизайна), но NO CQRS + Event Sourcing, или потоковое событие или историческое моделирование. Когда я сталкиваюсь с ситуацией, когда у меня будет большой набор людей, использующих небольшой набор данных (и не хочу блокировать пользователя), я буду использовать Event Sourcing. То, что это означает (по крайней мере для меня), - это все, что я делаю, начиная с разделения команды на запрос (разделение проблем).Как читать и писать с помощью CQS

Я использую EF ORM и фактическую схему для командной стороны. На стороне запроса лучше всего использовать только представления (из того, что я читаю), но это мнение, я думаю, не исключает, что я использую ORM (или нет) и/или Repo, или ADO.NET + Хранимые процедуры, и т. д., как метод доступа к этим представлениям из БД (я думаю).

Вот схема я сделал приблизительно-проиллюстрировать, что я имею в виду (его не является всеобъемлющим):

enter image description here

Мой вопрос:

Часть 1: Я не знать - правильно/лучше/проще/наиболее оптимизировано/наиболее удобно или легко переносить на источник событий в какой-то момент (я понимаю, это субъективно) извлекать данные из базы данных (из представления) и использовать ViewModels (DTO), чтобы предоставить клиенту свежий вид некоторого состояния (ПОСЛЕ обращения к команде)?

Часть 2: После того, как я внес изменения в пользовательский интерфейс на основе задач и, следовательно, изменил ViewModel, который лежит в основе пользовательского интерфейса, как мне выдавать команду из этого, когда ViewModel полностью отделен от Entities (Domain Model) на стороне команды. Эти ViewModels (DTO) могут быть совершенно другой «формой», чем Entities.

UPDATE:

Чтобы было ясно, я не собираюсь использовать Async и Сделки плюс начать, это только команды и запросы Separation (не полная взорван CQRS, где сторона возвращает командование «void») - Я ищу здесь самые основы. Кроме того, из того, что я читал до сих пор, кажется, что DDD и ограниченный контекст идут рука об руку с CQRS, на данный момент у меня нет реального опыта работы с DDD или Aggregate Root вместе с ограниченным контекстом и до сих пор не видели реальной и насущной необходимости взаимодействовать с этой методологией/образцом. В данный момент кажется, что я буду использовать EF/Migrations для команды Command и не решил, что использовать на стороне Query (рассматривается ADO.NET).

Командная часть в моем случае вернет объект, например, новый Клиент с созданной базой данных CustomerId. Я буду использовать одну базу данных как для команд, так и для запросов, и хотел бы использовать сборку Views в БД для возврата моделей из запросов (другими словами, мне хотелось бы, чтобы запросы были «сопоставлены» с представлениями по большей части) , То, что я не знаю, - это то, как команда должна выглядеть в случаях, когда и объект должен быть возвращен, если я должен использовать сторону запроса для возврата данных для команды. Я попытаюсь включить Automapper для преобразования объектов в ViewModels в случае MVC.

ответ

1

Должен признаться, что мне трудно найти реальный вопрос здесь, но я пойду с заголовком в качестве основы для моего ответа.

Прежде всего вы заявляете, что не собираетесь использовать CQRS, но предлагаемое решение очень близко к архитектуре CQRS, более чем что-либо еще. Будучи новичком и пробуя образец, но в то же время его изменение сильно увеличивает сложность.

В основном для возможности чтения и записи с использованием CQS важно, чтобы вызывающий абонент управлял генерацией идентификаторов. Это позволяет сохранить объект, а затем восстановить его, не полагаясь на возвращаемые значения операции команды. Гиды - отличные кандидаты на это.

Также я должен указать, что между CQS и CQRS существуют очень большие различия в качестве шаблонов. CQS - это шаблон низкого уровня, который можно применять практически в любой архитектуре, а CQRS - очень высокоуровневый. Они разделяют философию дизайна, но не намного больше.

Смежные вопросы