用面向对象技术在Java中实现CQRS
我有一个API,其中查询和实体模型的表示由同一个类表示。简化版:用面向对象技术在Java中实现CQRS,java,oop,cqrs,Java,Oop,Cqrs,我有一个API,其中查询和实体模型的表示由同一个类表示。简化版: class Model { private Long id; private Double a; private Double b; ... } 问题是这些属性加在一起作为查询对象毫无意义。它完全不需要id,并且a,b是独占的。没有适当的分离,代码很难理解。我的计划包括为每种类型的键创建单独的查询类:A和B 不过,让我担心的是,为了避免使用instanceof(任何假定了解所有查询类型的代码),我需要在查询对象中
class Model {
private Long id;
private Double a;
private Double b;
...
}
问题是这些属性加在一起作为查询对象毫无意义。它完全不需要id
,并且a
,b
是独占的。没有适当的分离,代码很难理解。我的计划包括为每种类型的键创建单独的查询类:A
和B
不过,让我担心的是,为了避免使用instanceof
(任何假定了解所有查询类型的代码),我需要在查询对象中实现所有横切关注点。例如,映射到WHERE
子句作为实际SQL
查询的一部分
为了避免客户端对实现有隐式依赖,我最初的计划是创建扩展每个POJOA
和B
的服务器端类,并在那里实现细节。这需要额外的映射层从A
映射到将实现sqlQuery()
操作的其他类(简化事务)
问:既然这看起来已经够复杂了,有没有一些标准的方法来解决这类问题?欢迎使用引用和模式。正如您所说,实现单独的查询类似乎是个好主意。GOF的战略模式可能是一个很好的起点,请参见无法完全理解这个问题。您能提供一个更具体的例子吗?a和b在你的领域里真的是双倍的吗?