我想知道是否有任何方法可以从视图中删除条目。
例如:您有包含活动属性的用户聚合根
发出UserCreated事件时,User Active属性设置为true并且ActiveUserView被绑定到它,因此用户显示在视图中。
现在为相同的聚合根Id发出UserInactive,InactiveUsersView订阅了它,但这个AG仍然在ActiveUsersView中,我如何删除它?还是我做错了什么?
EDIT:我知道我可以做一个变通方法,使用聚合根Id手动删除它,但这不是一个漂亮的解决方案。
我不确定我是否正确理解你的问题,但无论如何我都会尝试一下:)
因此,我的理解是,您有一个发出UserCreated
和UserInactive
的聚合根,并且您希望维护两个视图:ActiveUsersView
和InactiveUsersView
,每个视图分别包含每个活动用户和非活动用户的视图实例。
由于目前无法使用Cirqus(*)删除视图实例,我建议您将视图更改为UserActivityStatusView
指令,只需在每个事件上轻弹一个bool即可-类似于以下内容:
public class UserActivityStatusView :
IViewInstance<InstancePerAggregateRootLocator>,
ISubscribeTo<UserCreated>,
ISubscribeTo<UserInactive>
{
//...
public bool Active { get; set; }
public void Handle(IViewContext c, UserCreated e) {
Active = true;
}
public void Handle(IViewContext c, UserInactive e) {
Active = false;
}
}
然后,在应用程序中,只需确保使用正确的条件查询视图。
这有道理吗?
(附言:我为你的问题回答得太晚而道歉:)
(*实际上我本想允许调用viewContext.MarkForDeletion()
,但它比我预期的要困难……而且我并不太需要它,我一直能够想出同样好的替代方法来建模我的视图)