抛出异常或引发域名事件?

时间:2012-05-03 13:00:54

标签: asp.net-mvc events notifications domain-driven-design entity

考虑以下代码:

public class Article : AbstractEntity<Article> {    

    // ...

    public void AppendFeedback(Feedback feedback) {
        var quota = this.FeedbacksQuota ?? this.DefaultFeedbacksQuota;            
        if(this.Feedbacks.Count >= quota) {
            throw new ApplicationException("message");
        }
        this.Feedbacks.Add(feedback);
    }

    // ...
}

所以我不知道在超出配额时如何通知用户。抛出异常对我来说似乎很糟糕。它是使用domain events的正确位置吗? (示例表示赞赏,特别是在ASP.NET MVC application)的背景下。

我应该在哪里收集/处理消息?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您的反馈配额是不变量(业务规则),那么异常就可以了。

您始终可以添加以下方法:

public bool CanAddFeedback
{
    get { return this.Feedbacks.Count < quota; }
}

在添加之前检查是否允许反馈,以便您可以返回有意义/用户友好的消息。

可以根据包含剩余配额的反馈添加域名事件等。