查询命令分离其他模式
Posted zhuxudong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查询命令分离其他模式相关的知识,希望对你有一定的参考价值。
查询命令分离
public class CQRS {
/**
* Command Query Responsibility Segregation【命令查询职责分离】:
* 查询操作是幂等的,可以放心使用;但是使用命令操作时需要加倍小心。
* CQRS 一般和Event Sourcing【事件溯源】一起在 Domain Driven Design【领域驱动设计】中使用。
*/
@Test
public void all() {
final UserCommand userCommand = new UserCommandImpl();
userCommand.add(new User("zxd", 1));
userCommand.add(new User("kristy", 2));
final UserQuery userQuery = new UserQueryImpl();
final User user = userQuery.getByName("zxd");
assertNotNull(user);
userCommand.update(new User("zxd", 3));
userCommand.delete("zxd");
}
}
@Data
class User{
private final String name;
private final int order;
}
interface UserCommand{
void add(User user);
void update(User user);
void delete(String username);
}
interface UserQuery{
User getByName(String name);
}
class UserCommandImpl implements UserCommand{
@Override
public void add(User user) {
SharedSource.USERS.putIfAbsent(user.getName(), user);
}
@Override
public void update(User user) {
SharedSource.USERS.putIfAbsent(user.getName(), user);
}
@Override
public void delete(String username) {
SharedSource.USERS.remove(username);
}
}
class UserQueryImpl implements UserQuery{
@Override
public User getByName(String name) {
return SharedSource.USERS.get(name);
}
}
interface SharedSource {
ConcurrentMap<String, User> USERS = new ConcurrentHashMap<>();
}
以上是关于查询命令分离其他模式的主要内容,如果未能解决你的问题,请参考以下文章