2009-08-06 2 views
2

ビジネスクラスのSystem.Windows.Formsへの参照があり、MessageBox.Showを間違って使用していますか?ビジネスクラスのメッセージボックスが間違っていますか?

現在、サービスクラスを装飾するイベント処理デコレータクラスがあります。特定のイベントが発生すると、デコレータは特定の機能の処理を続行するかどうかをユーザーに尋ねます。

このデコレータクラスにはこれらのメッセージボックスがありますか?

答えて

11

ビジネスクラスではUIを使用しないでください。

これは、ビジネスクラスがどのように使用されているのかわからないためです。おそらく、新しいWebサイト、Webサービス、Windowsサービスなどで使用されます。そのような場合、メッセージボックスは不適切です。

これを処理する正しい方法は、UIやビジネスクラスの他の消費者が購読できるイベントを提供することです。 UIレイヤーがメッセージボックスを表示するかどうかを決定させます。

確かに、いくつかのログフレームワークを見て、おそらくこのイベントを記録するべきです。

+0

(イベントをフックして、正しいUIを表示することができますUIにイベントを起動すると応答が返されますか?メッセージボックスの表示で「はい」または「いいえ」を選択したかどうかを知るにはどうすればよいですか? – c00ke

+0

イベントはEventArgsパラメータを使用して回答を返します。実際にはフラグを設定して戻るだけでイベントを処理し、実際にはユーザーに尋ねるのではなく、意思決定を行います。 –

+1

基本的な考え方: 1.ビジネスにカスタムイベントを定義します。オブジェクト。 serviceNotificationEventなどがあります。あなたがメッセージボックスを検討しているところで 2.、代わりにこのような何か: (!serviceNotificationEvent = NULL){ serviceNotificationEvent(新しいServiceNotificationEventArgs(someDataが、MOREDATA))の場合を、 } 3. UIで、ServiceNotificationEventに登録します(例: )。myServiceObject.ServiceNotificationEvent + = new ServiceNotificationEventHandler(); 上記のコードは擬似コードです。詳細についてはここをクリックしてください。 http://www.akadia.com/services/dotnet_delegates_and_events.html –

3

メッセージボックスはおそらくどこでも間違っています。私はすでにあなたがそれらを見せている前に結果を伝えることができます。ユーザーは[キャンセル]をクリックします。彼らはいつもします。同じメッセージボックスに後でたくさんのヒットがない場合、「キャンセル」は自分が望むことをしなかったため、ユーザーは「続行」をクリックします。

あなたはすでに答えを知っている場合は、なぜ質問をするのが嫌ですか?

+0

+1洞察力のある:) –

3

bussinesクラスでは、直接のUI通信は絶対に使用しないでください。

これは、UIがwinforms/webforms/console/smart_devices/etc ...であるか、UIが使用されていないためです(スクリプトなど)。

ユーザがbussinesプロセスで決定する必要がある場合は、いくつかの方法、その方法を使用できます。 .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その後、私はなるだろうどのようになどのメッセージボックス、InputBox関数、Webフォーム、コンソールの読み取り/書き込み、....

関連する問題