是否在业务类中引用 System.Windows.Forms 并使用 MessageBox.Show 错误?
目前有一个事件处理装饰器类装饰一个服务类。当某些事件触发时,装饰器想询问用户是否要继续处理某些功能。
这个装饰器类有这些消息框可以吗?
是否在业务类中引用 System.Windows.Forms 并使用 MessageBox.Show 错误?
目前有一个事件处理装饰器类装饰一个服务类。当某些事件触发时,装饰器想询问用户是否要继续处理某些功能。
这个装饰器类有这些消息框可以吗?
您永远不应该在商务舱中使用 UI。
这样做的原因是您永远不知道您的商务舱将来会如何使用。也许它将用于新网站、Web 服务、Windows 服务等。在所有这些情况下,消息框都不合适。
处理此问题的正确方法是提供您的 UI 或您的业务类的任何其他消费者可以订阅的事件。让 UI 层决定是否显示消息框。
您当然还应该查看一些日志框架并可能记录此事件。
消息框可能到处都是错误的。在你展示之前,我已经可以告诉你结果了。用户将单击取消。他们总是这样做。如果您稍后点击相同的消息框,您的用户将单击继续,因为“取消”没有按照他们想要的方式进行。
所以,如果你已经知道答案,为什么还要问这个问题呢?
在 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;}
}
然后用户界面可以挂钩事件并显示正确的用户界面(消息框、输入框、网络表单、控制台读/写等......