实现CQRS时为空的ICommand和IQuery接口

问题描述 投票:0回答:1

我一直在阅读有关CQRS的内容,并在其中搜索了一些示例。在此过程中,我找到了GitHub repo for the Pluralsight course "CQRS in practice"(很遗憾,我现在无法访问该课程)。我正在查看源代码,然后发现一开始我觉得很尴尬:有两个接口ICommandIQuery只是left empty。换句话说:

public interface ICommand { }
public interface IQuery<TResult> { }

此后所有命令将实现ICommand,所有查询将实现IQuery<TResult>

但是这对我来说很尴尬。接口是contract。实现它的类将签约,并保证具有指定的方法。这里没有任何方法。所以我真的不明白为什么有人会这样做。

那么拥有空白界面有什么意义呢?为什么有人会创建和实现未定义任何合同的接口?

oop interface cqrs object-oriented-analysis
1个回答
0
投票

这里很好的参考是Effective Java,作者是Joshua Bloch:

使用标记接口定义类型

A marker interface是一个不包含方法声明,而仅指定(或“标记”)实现该接口具有某种属性的类的接口。

由于标记接口定义了一种类型,因此可以使用类型检查器在编译时而不是在运行时捕获某些类别的错误。

Bloch提出了一个特定的问题:“我可能想编写一个或多个只接受带有此标记的对象的方法吗?”

在DDD中,您是否想编写只接受ICommand或IQuery的方法?

在快速浏览了霍里科夫的例子之后,对我来说,他并不需要定义类型-注释,甚至是注释,可能是一个更好的选择。

© www.soinside.com 2019 - 2024. All rights reserved.