L'Architecture pour les applications WinForms?
J'ai commencé un projet WinForms il y a quelques semaines et que je ne savais pas vraiment ce que les caractéristiques que je voulais, j'ai juste ajouté le long de la route. Maintenant cela a provoqué un horrible gâchis où mon MainForm est une grosse boule de boue et où, par exemple, d'importantes modifications de l'état sont déclenchées par des éléments de l'INTERFACE utilisateur pour le point que je dois appeler l'Événement OnChange de Contrôle afin de changer certaines de l'état dans la base de données.
En bref: je viens de commencer un nouveau projet où je veux prendre une meilleure approche. Je ne sais pas ce qui serait le "bon". Dans ASP.net MVC, j'ai trouvé le Modèle MVVM vraiment utile, mais sur le Bureau, MVVM semble être conçu uniquement pour WPF, pas pour WinForms.
L'autre approche est l'un des trois niveaux de l'architecture: j'ai ma Base de données de Classe qui s'exprime actuellement directement à l'INTERFACE utilisateur. Je vais maintenant créer une nouvelle Classe Statique ("ApplicationState") qui parle à la base de données et déclenche des événements pour dire l'INTERFACE utilisateur "Hey, quelque Chose de changé!". L'INTERFACE utilisateur de manipuler l'État qui prendra alors en charge la base de données de persistance et de nouveau lever des Événements si l'INTERFACE utilisateur doit mettre à jour. Le point ici est que la ApplicationState classe ne modifie jamais l'INTERFACE utilisateur directement, mais que l'INTERFACE utilisateur s'abonne aux Événements. Que semble comme un propre/"MVC-y" manière de faire, mais peut-être que je suis surplombant quelque chose ici?
Fondamentalement, mon but ultime serait d'avoir l'INTERFACE utilisateur complètement indépendant de la couche de base de données juste pour s'assurer que je n'ai pas de fil dans une logique d'entreprise dans l'INTERFACE utilisateur de nouveau.
OriginalL'auteur Michael Stum | 2009-08-24
Vous devez vous connecter pour publier un commentaire.
De ne pas le jeter dans la serviette sur le MVVM - elle est valable pour les WinForms. En gros, si vous utilisez la liaison de données, vous avez à prendre une décision sur ce que vos objets vont se lier à. Souvent, surtout pour les plus complexes de l'INTERFACE utilisateur, vous ne souhaitez pas lier directement à votre domaine d'objets, vous voulez construire des classes spécialisées (parfois wrappers) de votre INTERFACE utilisateur peut se lier à qui fournir tout le point de vue des besoins (l'essence de MVVM) et la technique fonctionne aussi bien avec les Winforms.
Une bonne série sur les WinForms Model-View-Presenter approche peut être trouvé à
Construire Votre Propre CABINE de la Série de Table des Matières
+1 pour la référence à la série sur le MVP en WinForms.
OriginalL'auteur HokieMike
NDepend documentation est fournie avec certains assez cool et avancée en ligne de billets de blog, des articles et des livres blancs concernant l'architecture de l' .NET code.
Conseils sur la séparation du code en passant par .NET assemblées
Les Composants de contrôle de Dépendances pour gagner une Architecture Propre
Re-factoring, la Restructuration et le coût de Levelizing
Conception évolutive et Acyclique du groupement
La superposition, le Niveau de la métrique et le Discours de la Méthode
De Combat Fabriqué Complexité
Aussi, si vous voulez vérifier en permanence que votre code de l'INTERFACE utilisateur est indépendant de votre code de base de données, vous pouvez écrire facilement du Code de Requête les règles de la Langue qui sera vérifié vivre au temps de développement dans Visual Studio:
Gardez votre structure de code propre
OriginalL'auteur Patrick from NDepend team
Ce que je serais toujours aller pour le (premier) est une application en couches
Cette organise votre application extrêmement bien. Ensuite, j'ai regarder pour certains MVC type d'approche. Je ne développe pas tellement avec WinForms, de plus en plus avec Asp.net et certaines Java clients de Bureau (où j'ai utilisé MVC). WinForms fonctionne plus avec la .Net approche de la liaison de données (source de données, DataMember,...). Vous devriez aller pour cette approche, au lieu d'essayer de forcer quelque chose d'autres. Je trouve qu'il ne correspond pas à ce que le bien.
Ce qui est toujours utile, c'est d'exposer notre logique de l'INTERFACE utilisateur dans les différents contrôles (comme des UserControls dans Asp.net). Cela facilite la réutilisation.
Je suppose que cela donne .NET le fromage entre les couches?
D'où vient la couche de fromage à adapter? J'aime le fromage.
Nous avons fromage sur le cerveau, hein?
Le fromage sont les couches d'interface que garder les choses ensemble et l'injection de dépendance fournie par MS Unité qui reçoit le bon instanciations de la BL etc.. 🙂
OriginalL'auteur Juri
Commencer à écrire unité-tests pour tout ce que vous pouvez penser. Comme certaines pièces seront le taux de participation difficile de test unitaire en raison de couplage pour les WinForms, séparer. Propre. Se laver. Répétez.
sans les tests unitaires", c'est un enfer d'une différence. L'absence d'unité-tests est ce que les lecteurs de la grosse boule de boue.
Les tests unitaires sont pas une panacée, dans mon expérience. Des boules de boue suite à partir d'ajouter des trucs que vous allez, sans un plan clair à l'avance. Une boule de boue avec un joint de la suite de tests est encore une boule de boue (et parfois, ces tests sont une autre boule de boue).
Alright. Vous avez 13k rep afin de vous gagner 🙂 Même si une boule de boue avec un plan est toujours une boule de boue.
Je suis en désaccord en ce qu'il ne devrait pas être la seule approche d'une solution structurée. Je suis d'accord pour que le test unitaire est bien structuré code. Si le vôtre ne pas, vous n'êtes pas de tests unitaires de droit.
OriginalL'auteur zvolkov
Nido cadre est bon. Toutefois, il est juste de votre back-end de l'architecture. Il vous donnera un solide, flexible et plus simple back-end avec t4template. Il s'avère être un très bon modèle d'architecture. En outre, il peut branchez pas seulement avec WinForm, mais avec tout les autres (MVC ASP.NET etc) avant la fin de trop..
Puis de nouveau RocketFramework est également bon
Link1: http://rocketframework.codeplex.com
Link2: http://nidoframework.codeplex.com
OriginalL'auteur L.W.C. Nirosh
Notre règle d'or est de se pencher vers MVC pour la plupart des sites web en raison de la apatrides nature du web. Sauf si vous êtes en essayant de fournir une très riche expérience sur le web et les amener dans silverlight, alors vous devriez aller avec MVVM. XAML va main dans la main avec MVVM et peut être votre client intelligent choix (ou une belle MVCP modèle).
Vrai MVC est presque impossible de maintenir dans toute autre circonstance en raison du fait que les contrôleurs sont supposons que pour gérer toutes les entrées. La plupart des pays de l'architecture du web, des mesures de contrôle qui permettra de fournir ce pour vous. En fait, la plupart disent que ASP.NET MVC est un hybride MVC de toute façon, mais il est très bon dans mon expérience.
OriginalL'auteur RailRhoad
Bon,
J'ai trouvé quelques belles réponses ci-dessus, mais comme pour mon 4 ans et+ d'expérience en winform, je peux dire que vous pouvez utiliser dotnet remoting pour ce but. En termes simples, vous devez créer une solution pour votre entreprise logique et côté client qui fonctionne et une autre solution pour la connexion avec la base de données qui vous pouvez l'appeler comme un serveur. Les deux solution doit contenir certains des projets communs, et puis vous pouvez facilement fonctionne sur votre demande sans vous soucier de votre base de données.
Je vous suggère de lire sur dotnet remoting.
Espoir, cette réponse est utile.
OriginalL'auteur Manish Jain