Я читал о CQRS и искал несколько примеров. В ходе этого процесса я нашел репозиторий GitHub курса Pluralsight "CQRS на практике". (к сожалению, я не могу получить доступ к курсу прямо сейчас). Я просматривал исходный код и заметил кое-что, что поначалу показалось мне неудобным: есть два интерфейса ICommand
и IQuery
, которые просто оставлены пустыми. Другими словами:
public interface ICommand { }
public interface IQuery<TResult> { }
После этого все команды будут реализовывать ICommand
, а все запросы будут реализовывать IQuery<TResult>
.
Но это неудобно для меня. Интерфейс — это контракт. Класс, реализующий его, подпишет контракт и будет гарантированно иметь указанные методы. Здесь нет никакого метода. Так что я действительно не понимаю, зачем кому-то это делать.
Так какой смысл иметь пустой интерфейс? Зачем кому-то создавать и реализовывать интерфейсы, которые не определяют никакого контракта?
ICommand
. Обычно у вас было быIHandleCommand<T extends ICommand>
. Иногда вы можете использовать для этого аннотации вместо интерфейсов маркеров, но я считаю, что вы не можете иметь общие типы, ограниченные аннотациями на большинстве языков (возможно, на всех). - person plalx   schedule 20.01.2020