2009-08-06 6 views
2

Avoir une référence à System.Windows.Forms dans une classe d'affaires et en utilisant MessageBox.Show wrong?La boîte de message est-elle incorrecte dans la classe affaires?

Actuellement, une classe décorative de traitement d'événement décore une classe de service. Lorsque certains événements ont déclenché le décorateur aimerait demander à l'utilisateur s'il souhaite continuer à traiter certaines fonctionnalités.

Est-il acceptable pour cette classe de décorateur d'avoir ces boîtes de message?

Répondre

11

Vous ne devriez jamais avoir une interface utilisateur dans une classe affaires. La raison de ceci est que vous ne savez jamais comment votre classe affaires pourrait être utilisée plus tard dans la vie de tous les jours. Peut-être sera-t-il utilisé dans un nouveau site Web, un service Web, un service Windows, etc. Dans tous ces cas, une boîte de message serait inappropriée.

La meilleure façon de gérer cela est de fournir un événement auquel votre interface utilisateur ou tout autre consommateur de votre classe d'entreprise peut s'abonner. Laissez la couche d'interface utilisateur décider si elle affichera une boîte de message ou non.

Vous devriez certainement également consulter certains cadres de journalisation et probablement consigner cet événement.

+0

Comment pourrais-je obtenir la réponse de retour si je tire l'événement jusqu'à l'interface utilisateur? Comment saurais-je s'ils choisissent oui ou non sur l'exposition de boîte de message? – c00ke

+0

L'événement fournirait, par le paramètre EventArgs, la réponse en arrière. gérer l'événement en plaçant simplement le drapeau et en revenant, en effet prendre la décision au lieu de demander à l'utilisateur –

+1

Idée de base: 1. Définissez un événement personnalisé dans votre entreprise. objet, par ex. serviceNotificationEvent ou similaire. 2. Dans l'endroit où vous envisagez un MessageBox, au lieu de faire quelque chose comme ceci: (! ServiceNotificationEvent = null) si { serviceNotificationEvent (nouveaux ServiceNotificationEventArgs (someData, MOREDATA)); } 3. Dans votre interface utilisateur, abonnez-vous à ServiceNotificationEvent, par exemple: myServiceObject.ServiceNotificationEvent + = new ServiceNotificationEventHandler(); Le code ci-dessus est un pseudocode.Lisez à propos des événements ici pour étoffer les détails. http://www.akadia.com/services/dotnet_delegates_and_events.html –

3

Les boîtes de message sont probablement erronées partout. Je peux déjà vous dire le résultat avant que vous l'ayez montré. Les utilisateurs vont cliquer sur Annuler. Ils font toujours. Si vous cliquez sur le même messagebox pas beaucoup plus tard, vos utilisateurs vont cliquer sur continuer car "Annuler" n'a pas fait ce qu'ils voulaient. Donc, si vous connaissez déjà la réponse, pourquoi s'embêter à poser la question?

+0

+1 perspicace :) –

3

Dans la classe bussines, vous ne devez JAMAIS utiliser de communications directes avec l'interface utilisateur. C'est parce que l'interface utilisateur peut être winforms/webforms/console/smart_devices/etc ... ou aucune interface utilisateur n'est utilisée (dans les scripts par exemple).

Si vous avez besoin d'un certain nombre de décisions de l'utilisateur dans le processus d'affaires, vous pouvez utiliser plusieurs façons, comment cela. En .NET est l'un des moyens simples des événements.

Par exemple:

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;} 
} 

L'interface utilisateur peut alors accrocher les événements et montrer l'interface utilisateur correcte (messagebox, inputbox, formulaire en ligne, console de lecture/écriture, etc ....

Questions connexes