在商务舱中有消息框错了吗?

时间:2009-08-06 09:17:48

标签: .net business-objects design-principles

是否在业务类中引用System.Windows.Forms并使用MessageBox.Show错误?

目前有一个事件处理装饰器类装饰服务类。当某些事件被解雇时,装饰者想询问用户是否要继续处理某些功能。

这个装饰器类可以使用这些消息框吗?

3 个答案:

答案 0 :(得分:11)

您不应该在商务舱中拥有用户界面。

原因是您永远不知道您的商务舱如何在路上使用。也许它将用于新网站,网络服务,Windows服务等。在所有这些情况下,消息框都是不合适的。

处理此问题的正确方法是提供您的UI或您的业务类的任何其他使用者可以订阅的事件。让UI层决定是否显示消息框。

你当然也应该看一下那里的一些日志框架,并且可能记录这个事件。

答案 1 :(得分:3)

消息框可能无处不在。在你展示它们之前我已经可以告诉你结果了。用户将单击“取消”。他们总是那样做。如果您在很长一段时间内没有点击同一个消息框,那么您的用户将会点击“继续”,因为“取消”没有按照自己的意愿行事。

所以,如果你已经知道答案,为什么还要问这个问题?

答案 2 :(得分:3)

在bussines类中,你绝不应该使用任何直接UI通信。

因为UI可以是winforms / webforms / console / smart_devices / etc ...或者没有使用UI(例如在脚本中)。

如果您需要一些用户决定在商务流程中,您可以使用多种方式,如何做到这一点。在.NET中是一种简单的事件方式。

例如:

public class MyBussinesClass {
    public void DoSomeBussinesRelatedWork() {
        // ... some code and then you need a users decision
        var argWhichCurrencyToUse = new DecisionEventArgs {
           Title = "Currency selection",
           Text = "Which currency you want to use in bill?",
           Answer = "USD"
        };
        this.OnDecisionRequred( argWhichCurrencyToUse );
        // ... contine in work ...
    }

    protected void OnDecisionRequired( DecisionEventArgs e ) {
        // run the event
    }
    public event EventhHandler<DecisionEventArgs> DecisionRequired;
}

public class DecisionEventArgs {
    public string Title {get;set;}
    public string Text {get;set;}
    public object Answer {get;set;}
}

UI然后可以挂钩事件并显示正确的UI(消息框,输入框,webform,控制台读/写等等....