查询(Query)的主要职责
- 职责:负责从系统中检索数据,目的是获取信息,不会对系统的状态进行修改。它主要用于向用户呈现数据,例如在报表、展示页面等场景中。
- 特点:通常是幂等的,即多次执行相同的查询会返回相同的结果,因为它不改变系统状态。
命令(Command)的主要职责
- 职责:用于改变系统的状态,比如创建、更新或删除数据。命令代表了系统中的一个动作,执行命令会导致系统状态发生变化。
- 特点:一般不是幂等的,多次执行可能会产生不同的结果,因为每次执行都会改变系统状态。
在简单用户管理系统中的示例
查询操作示例
- 获取所有用户列表:用户管理模块可能需要向管理员展示所有注册用户的列表,这时候就需要一个查询操作。它从数据库中检索所有用户的信息并返回,不会改变用户的任何数据。例如:
public IEnumerable<User> GetAllUsers()
{
// 从数据库获取用户数据逻辑
return _dbContext.Users.ToList();
}
- 根据用户名查询用户信息:当管理员想要查看某个特定用户名的详细信息时,可通过查询操作实现。它同样只是获取数据,不改变数据。例如:
public User GetUserByUsername(string username)
{
return _dbContext.Users.FirstOrDefault(u => u.Username == username);
}
命令操作示例
- 创建新用户:当有新用户注册时,需要执行一个创建用户的命令。这个操作会在系统中新增一条用户记录,改变了系统的状态(增加了用户数据)。例如:
public void CreateUser(User user)
{
_dbContext.Users.Add(user);
_dbContext.SaveChanges();
}
- 更新用户密码:如果用户忘记密码并进行密码重置,这就是一个更新用户数据的命令操作,它改变了用户的密码字段,从而改变了系统状态。例如:
public void UpdateUserPassword(string username, string newPassword)
{
var user = _dbContext.Users.FirstOrDefault(u => u.Username == username);
if (user != null)
{
user.Password = newPassword;
_dbContext.SaveChanges();
}
}
- 删除用户:当某个用户违反规定,管理员决定删除该用户账号时,执行的就是删除用户的命令,它从系统中移除用户数据,改变了系统状态。例如:
public void DeleteUser(string username)
{
var user = _dbContext.Users.FirstOrDefault(u => u.Username == username);
if (user != null)
{
_dbContext.Users.Remove(user);
_dbContext.SaveChanges();
}
}