2010-11-10 20 views
4

Cela peut être un peu vague, mais je travaille sur un programme où plusieurs classes mettent à jour l'interface utilisateur. J'ai créé une classe «middle-man» qui prend en charge toutes les demandes d'interface utilisateur (entre autres) et les achemine vers l'interface utilisateur elle-même, de sorte que la classe d'interface interagit uniquement avec l'intermédiaire. Le problème est que la classe UI a environ 20 fonctions différentes dans son interface, et toute ma classe middle-man est essentiellement prendre des appels des classes de niveau inférieur, puis appeler une fonction essentiellement identique dans l'interface utilisateur, qui Je me demande si cela va à l'encontre du but. Je suis sûr que c'est un problème qui revient souvent. Y a-t-il une manière plus élégante de faire ceci?Classes de découplage C#

Merci,

PM

Répondre

2

Il est agréable de ne pas se référer à des choses de l'interface utilisateur dans le back-end. Je suppose que c'est la raison pour laquelle vous voulez faire cela. Si c'est le cas, vous pouvez implémenter Publish/subscribe pattern (tel que Observer pattern). De cette façon, vous n'avez pas besoin de vous référer spécifiquement à l'interface utilisateur. Vous pouvez simplement "publier" à partir de votre backend, et vous abonner à ces événements depuis votre interface utilisateur. Vous pouvez également hériter de votre interface utilisateur à partir d'une interface et spécifier les méthodes dont vous avez besoin pour cela. Ensuite, référez-vous seulement à l'interface dans votre backend.

+0

Ou encore mieux (c'est-à-dire plus de plaisir), implémentez une interface dans votre interface utilisateur pour chaque classe de backend (ou bien cela a du sens). Ensuite, vous pourriez potentiellement diviser l'interface utilisateur en classes distinctes sans que le backend sache jamais. – Zooba

+0

En outre, j'aime que vous ayez un vibraphone comme photo de profil. – Zooba

+0

Pourquoi merci! J'aime que vous le reconnaissiez comme un vibraphone et pas un idiophone similaire. Êtes-vous un vibrophoniste/percussionniste/musicien? – Smashery

2

Malheureusement, vous n'indiquez pas vraiment ce que vous utilisez pour créer votre interface utilisateur. Mais l'ensemble du problème peut rapidement disparaître avec WPF (ou Silverlight) et la liaison de données. En un mot, les éléments de l'interface utilisateur sont liés aux propriétés et aux commandes d'une classe de sauvegarde. Lorsqu'une propriété change, l'événement PropertyChanged est déclenché et l'interface utilisateur sait se mettre à jour automatiquement. Pour plus d'informations, lancez une recherche sur MVVM. À la fin de la journée, il s'agit en fait d'une forme de modèle d'observateur, mais vous n'avez pas à faire tout le câblage vous-même.

+0

C'est exactement ce que je cherchais, malheureusement, l'interface utilisateur est déjà codée, donc il est un peu trop tard pour aller WPF, mais certainement quelque chose que je garderai à l'esprit pour les futurs projets. – user472875