看看这个测试,这个测试对我来说非常熟悉(参见here):
[Test]
public void When_calling_Save_it_will_add_the_domain_events_to_the_domain_event_storage()
{
var client = Client.CreateNew(new ClientName("New Client"), new Address("Street", "123", "5000", "Bergen"), new PhoneNumber("1234567890"));
client.UpdatePhoneNumber(new PhoneNumber("1234567890"));
client.UpdatePhoneNumber(new PhoneNumber("1234567890"));
_repository.Add(client);
_eventStoreUnitOfWork.Commit();
Assert.That(_domainEventStorage.GetEventsSinceLastSnapShot(client.Id).Count(), Is.EqualTo(3));
Assert.That(_domainEventStorage.GetAllEvents(client.Id).Count(), Is.EqualTo(3));
}
实体/聚合根/对象是否应该像这样持久化?不应该通过命令/总线实现一切(例如,mvc控制器/服务应该只提供总线的引用而不是存储库?或者这只是一个单独的单元测试?
答案 0 :(得分:1)
一般来说,我同意通过命令和事件生成状态并通过某种形式的总线协调这些命令和事件是CQRS系统中的常见方法。因此,在这些方面测试系统是有意义的,但是,在我看来,这个测试的主旨是确保事件持久性机制正在工作,而不是“客户端”在给定某些命令的情况下产生正确的事件(尽管它间接地做了一点)。鉴于测试的重点是确保事件持久性系统正常工作,将事件直接传递给持久性系统并确保它做正确的事情可能会更清晰/更明确。