深入解析CQRS架构中的查询栈
1. CQRS架构与陈旧数据处理
在高度协作的系统中采用CQRS架构,除了其本身的优势外,还涉及到处理陈旧数据的必要性。CQRS架构由两个管道组成,深入探究这两个管道,能更清晰地看到这一关键方面。
2. 只读领域模型的优势
只处理查询的模型比同时处理查询和命令的模型更容易组织。例如,引入只读领域模型可以出色地解决之前提到的一个棘手问题。
2.1 为何需要不同的模型
在Order类中,Items属性用于暴露所订购产品的列表。但对于Items属性应使用何种实际类型是个问题。若使用IList<T>,虽然可行,但并不完美。
public IList<OrderItem> Items { get; private set; }私有设置器虽能防止用户替换列表,但不能阻止代码添加或移除元素,这是否合法取决于具体用例。若用于管理订单,通过列表暴露订单项目没问题;若用于显示最近10个订单,列表可能存在风险,因为不期望订单有更改。
若将列表作为普通枚举暴露,又无法创建订单并添加项目,且单个项目仍可通过直接访问修改。
public IEnumerable<OrderItem> Items { get; private set; }即使使用ReadOnlyCollection<