ビジネス クラスで System.Windows.Forms を参照し、MessageBox.Show を使用するのは間違っていますか?
現在、サービス クラスを装飾するイベント処理デコレータ クラスがあります。特定のイベントが発生すると、デコレータはユーザーに特定の機能の処理を続行するかどうかを尋ねます。
このデコレータ クラスにこれらのメッセージ ボックスがあっても大丈夫ですか?
ビジネス クラスで System.Windows.Forms を参照し、MessageBox.Show を使用するのは間違っていますか?
現在、サービス クラスを装飾するイベント処理デコレータ クラスがあります。特定のイベントが発生すると、デコレータはユーザーに特定の機能の処理を続行するかどうかを尋ねます。
このデコレータ クラスにこれらのメッセージ ボックスがあっても大丈夫ですか?
ビジネス クラスに UI を含めるべきではありません。
その理由は、ビジネスクラスが今後どのように使用されるか分からないからです。おそらく、新しい Web サイト、Web サービス、Windows サービスなどで使用されるでしょう。これらのすべての場合において、メッセージ ボックスは不適切です。
これを処理する正しい方法は、UI またはビジネス クラスの他のコンシューマーがサブスクライブできるイベントを提供することです。メッセージ ボックスを表示するかどうかは、UI レイヤーに決定させます。
また、いくつかのロギング フレームワークを確認し、おそらくこのイベントをログに記録する必要があります。
メッセージ ボックスはどこでも間違っている可能性があります。あなたがそれらを見せる前に、私はすでにあなたに結果を伝えることができます. ユーザーは [キャンセル] をクリックします。彼らはいつもそうします。しばらくしてから同じメッセージ ボックスにアクセスした場合、ユーザーは [キャンセル] が意図したとおりに実行されなかったため、[続行] をクリックすることになります。
では、すでに答えを知っているのに、わざわざ質問する必要はありません。
ビジネス クラスでは、直接 UI 通信を使用しないでください。
これは、UI が winforms/webforms/console/smart_devices/etc... である可能性があるか、UI が使用されていないためです (スクリプトなどで)。
ビジネスプロセスでユーザーが決定する必要がある場合は、いくつかの方法を使用できます。.NET では、イベントの簡単な方法の 1 つです。
例えば:
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 (メッセージボックス、入力ボックス、Web フォーム、コンソールの読み取り/書き込みなど) を表示できます。