从视图中删除条目

时间:2015-03-24 22:07:36

标签: event-handling views cirqus

我想知道是否有办法从视图中删除条目。

Ex:你有User Aggregate Root,其中包含Active属性

发出UserCreated事件时,User Active属性设置为true 并且ActiveUserView被置于其中,因此用户将出现在视图中。

现在为相同的聚合根ID发出UserInactive,InactiveUsersView订阅了它,但是这个AG仍然在ActiveUsersView中,我该如何删除它?或者我做错了什么?

编辑:我知道我可以使用聚合根ID手动删除它,但这不是一个漂亮的解决方案。

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确理解了你的问题 - 但无论如何我都会采取措施:)

所以 - 我的理解是你有一个汇总UserCreatedUserInactive的聚合根,你想要维护两个视图:ActiveUsersViewInactiveUsersView,每个视图都包含分别为每个活动和非活动用户的视图实例。

由于目前无法删除带有Cirqus(*)的视图实例,我建议您将视图更改为UserActivityStatusView insted,只需在每个事件上轻弹一个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;
    }
}

然后,在您的应用程序中,您只需确保使用正确的标准查询视图。

这有意义吗?

(PS:我为你问题的迟到答案道歉:))

(*我实际上打算允许拨打viewContext.MarkForDeletion(),但事实证明这比我预想的要困难得多......而且我并不需要那么多,我一直都能来用同样好的替代方法来建模我的观点)