Programming
.NET
ASP
Designing and refactoring
C#
Comments 11
+1
Парадигма CQRS в том или ином виде предполагает, что вызовы Query не будут менять состояние приложения. То есть многократные вызовы одной и той же query, в рамках одного запроса, будут иметь один и тот же результат.

НЕЕЕЕ, НУ ТАК НЕ ИНТЕРЕСНО....

+2
А кстати с чего вдруг такое допущение? Геттеры не меняют, а вот параллельно вызванные сеттеры очень даже.
+2
Не обязательно было разделять на IQuery и IAsyncQuery, можно в out передать Task.
+1

Это не очень хорошее решение, работа с асинхронным кодом отличается даже на уровне компилятора. Поэтому не стоит объединять это под одним интерфейсом, интерфейс должен быть явным. Да и каждый раз оборачивать возвращаемое значение IQuery в Task ужасно.
Написать один раз вот так легче:


public interface IAsyncQuery<TIn, TOut>: IQuery<TIn, Task<TOut>
{
}
0
Код хендлера
Контроллер
Закостыливание разделением портит картину. Отсутствие ковариации. И метод кстати все равно у вас асинхронный. На уровне компилятора все так же будет, напишите await — сгенерится стейтмашина.
+1
Пытался прочесть статью внимательно.

Не смог. Попахивает велосипедом, щедро сдобренным непонятными абстракциями.

При этом не видно
1) Универсальности кода
2) Простоты синтаксиса
3) Прозрачной архитектуры

Может быть написано сумбурно, но я не нашел ничего такого, что нельзя было сделать не выходя за рамки архитектуры EF и LINQ. Абстракции ради абстракция лишь утяжеляют код.
0
но я не нашел ничего такого, что нельзя было сделать не выходя за рамки архитектуры EF и LINQ.


Интерфейсы, описанные в статье, не имеют отношения к слою доступа данных. Это более высокий слой приложения
0
Что мешает тогда оформить все это в виде сервиса/датасервиса?
0
Реализации данных интерфейсов по сути и представляют application services. Единообразный интерфейс необходим, чтобы единообразно применять cross-cutting concerns.
0

Как с помощью датасета неявно закешировать результаты Query? Тут скорее вопрос методологии и вам CQRS не нравится

0
Подход прикольный, но добавление чего-то нового призывает делать рутину, которую можно было избежать. К тому же сервисы имеют побочные эффекты, и нечего им делать в домене.
По моему мнению в домене должна лежать чистая логика, которую можно легко тестить, а заниматся моками для домена это как то странно.
Я стараюсь придерживаться такого принципа: домен — калькулятор.
Only those users with full accounts are able to leave comments. , please.