假设我们有一个调用业务流程的服务。此过程将在数据层上调用以在数据库中创建类型为A的对象。
之后,我们需要再次调用数据层的另一个类以在数据库中创建类型B的实例。我们需要传递有关外键A的一些信息。
在第一种方法中,我们创建一个对象(修改状态)并在单个方法中返回其ID(查询)。
在第二种方法中,我们有两种方法,一种是保存的(createA),另一种是查询的(getId)。
public void FirstMethod(Info info)
{
var id = firstRepository.createA(info);
secondRepository.createB(id);
}
public void SecondMethod(Info info)
{
firstRepository.createA(info);
var key = firstRepository.getID(info);
secondRepository.createB(key);
}
据我了解,第二种方法更完全遵循命令查询分离。但是我发现查询数据库来获取我们刚刚创建的对象既浪费又违反直觉。
您如何在这种情况下调和CQS?
是否仅第二种方法遵循CQS,如果可以,在这种情况下是否更可取?