【发布时间】:2020-01-20 00:43:56
【问题描述】:
我一直在阅读有关 CQRS 的信息,并在谷歌上搜索了一些示例。在这个过程中,我找到了GitHub repo for the Pluralsight course "CQRS in practice"(不幸的是我现在无法访问该课程)。我正在查看源代码,然后我注意到一开始我感到尴尬的事情:有两个接口ICommand 和IQuery,它们只是留空。换句话说:
public interface ICommand { }
public interface IQuery<TResult> { }
之后所有命令都将实现ICommand,所有查询都将实现IQuery<TResult>。
但这对我来说很尴尬。接口是合约。实现它的类将签署合同并保证具有指定的方法。这里没有任何方法。所以我真的不明白为什么有人会这样做。
那么有一个空白界面有什么意义呢?为什么有人会创建和实现不定义任何合约的接口?
【问题讨论】:
-
是marker接口模式。例如,它只是告诉您哪些具体类应该用作
ICommand。你通常会有IHandleCommand<T extends ICommand>。有时您可以为此使用注释而不是标记接口,但我相信大多数语言(可能是所有语言)中的注释都不能使用泛型类型。
标签: oop interface cqrs object-oriented-analysis