Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 实现CQR时,ICommand和IQuery接口为空_Oop_Interface_Cqrs_Object Oriented Analysis - Fatal编程技术网

Oop 实现CQR时,ICommand和IQuery接口为空

Oop 实现CQR时,ICommand和IQuery接口为空,oop,interface,cqrs,object-oriented-analysis,Oop,Interface,Cqrs,Object Oriented Analysis,我一直在阅读有关CQR的文章,并在谷歌上搜索一些例子。在这个过程中,我发现了(不幸的是,我现在无法进入课程)。我正在看源代码,然后我注意到了一些起初让我感到尴尬的事情:有两个接口ICommand和IQuery,它们都是空的。换言之: public interface ICommand { } public interface IQuery<TResult> { } 公共接口ICommand{} 公共接口IQuery{} 之后,所有命令都将实现ICommand,所有查询都将实现IQ

我一直在阅读有关CQR的文章,并在谷歌上搜索一些例子。在这个过程中,我发现了(不幸的是,我现在无法进入课程)。我正在看源代码,然后我注意到了一些起初让我感到尴尬的事情:有两个接口
ICommand
IQuery
,它们都是空的。换言之:

public interface ICommand { }
public interface IQuery<TResult> { }
公共接口ICommand{}
公共接口IQuery{}
之后,所有命令都将实现
ICommand
,所有查询都将实现
IQuery

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

那么,拥有一个空白界面有什么意义呢?为什么会有人创建和实现不定义任何契约的接口

这里一个很好的参考是Joshua Bloch的《有效的Java》:

使用标记接口定义类型

标记接口是一个不包含方法声明的接口,它仅将实现接口的类指定(或“标记”)为具有某些属性

因为marker接口定义了一个类型,所以可以使用类型检查器在编译时而不是在运行时捕获某些类别的错误

Bloch提出了一个特别的问题:“我是否希望编写一个或多个方法,只接受具有此标记的对象?”

在DDD的情况下,您是否希望编写一个只接受ICommand或IQuery的方法


在快速浏览了Khorikov的示例之后,我不清楚他是否需要定义类型-注释,甚至注释,可能是更好的选择。

这是标记接口模式。例如,它只告诉您哪些具体类将用作
ICommand
。您通常会有
IHandleCommand
。为此,有时可以使用注释而不是标记接口,但我相信,在大多数语言(可能是所有语言)中,不能将泛型类型约束在注释上。