Question

J'ai créé un simple bureau de l'application en C# 3.0 pour apprendre le C#, wpf et .Net 3.5.Ma demande essentiellement lit les données à partir d'un fichier csv et les stocke dans une base de données SQL server CE.J'utilise sqlmetal pour générer de l'ORM code pour la base de données.Ma première itération de cette application est laid comme l'enfer et je suis dans le processus de refactoring il.

Ce qui m'amène à ma question.Comment voulez-vous l'architecte d'une base de données de bureau application en C#?Quelles sont les meilleures pratiques?

Voulez-vous créer une Couche d'Abstraction de Base (DAL), qui utilise le sqlmetal code généré?Ou le code généré est assez d'une abstraction?

Si vous utilisez DAL modèle, faites-vous faire un singleton ou un membre statique?Utilisez-vous le point de Vue-Modèle-ModelView modèle avec le DAL modèle?

Toutes mes excuses si ce qui semble être une longue question ouverte, mais j'ai donné beaucoup de pensée à récemment.Je vois beaucoup d'exemples sur la manière de l'architecte d'une entreprise n-tier application en C# mais pas que beaucoup sur l'architecture autonome des applications de bureau.

Était-ce utile?

La solution

Je voudrais commencer par l' Composite guide d'Application en WPF (la toux PRISM la toux à partir de Microsoft de P&P de l'équipe.Avec le téléchargement est une grande application de référence qui est le point de départ de la plupart de mes WPF développement aujourd'hui.

L' DotNetRocks de l'équipage juste interviewé Glenn Bloc et Brian Noyes si vous êtes intéressé par plus d'eux.

Encore mieux, Prism n'est pas aussi lourd que la CABINE a été, si vous êtes familier avec que de la WinForms jours.

Autres conseils

La réponse est "ça dépend", comme toujours.

Quelques choses à penser:Vous pouvez faire cette graisse application cliente d'une application web (par exemple) à un certain point.Si oui, vous devriez être sûr de garder la séparation entre la couche métier (et en dessous) et la présentation.Le moyen le plus simple pour ce faire est de vous assurer que tous les appels à la logique d'entreprise de passer par une interface d'un certain type.Façon plus complexe, est de mettre en place un MVC de l'installation.

Une autre chose que vous pourriez envisager est de rendre la couche d'accès aux données indépendant de la logique d'affaires et de l'interface utilisateur.Par cela, je veux dire que tous les appels de la logique métier dans la DAL doit être générique "donne-moi cette de données" plutôt que de "donne-moi cette de données à partir de SQL" ou encore pire "exécuter cette instruction SQL".De cette façon, vous pouvez remplacer votre DAL avec celui qui accède à une autre base de données, des fichiers XML, ou même quelque chose de dégueulasse comme des fichiers plats.

En bref, la séparation des préoccupations.Cela permet de se développer dans le futur en ajoutant une autre de l'INTERFACE utilisateur, de segmentation de l'ensemble des trois zones dans leur propre niveau, ou l'évolution de la technologie correspondante.

Avant la création de l'architecture de rien, vous devez définir les exigences de votre application.
C'est une erreur de débutant développeurs de départ de l'écriture de code avant de penser à comment il allait effectuer.Mon conseil est d'essayer de décrire certaines caractéristiques de l'application.Il vous aide à sentir la façon dont il devrait être mis en œuvre.

Comme pour des ressources d'apprentissage utiles, je vous recommande fortement de vous prendre un coup d'oeil à CompositeWPF c'est un projet spécialement conçu pour enseigner aux développeurs de meilleures pratiques de développement d'une application de bureau.

J'aimerais commencer avec Jeremy Miller Construire Votre Propre Cabine de la série.

J'ai été l'un des premiers de la CABINE adoptant.J'ai beaucoup appris de creuser dans le que la technologie et la lecture de tous les .NET, les blogs au sujet de l'architecture de l'application.

Mais récemment, j'ai eu la chance de démarrer un nouveau projet, et au lieu d'utiliser de la CABINE, je suis allé avec StructureMap & NHibernate et emprunté quelques-uns des motifs que Jeremy utilise (en particulier, sa manière de gérer les cas de regroupement).Le résultat a été une très simplifié, faite à la main cadre qui fait tout ce dont j'ai besoin et j'adore travailler avec elle.

Quant aux spécificités de votre question:Je utiliser un Référentiel pour l'accès aux données.Au départ, j'ai écrit quelques ADO.NET code et a utilisé les données des lecteurs et cartographié mes objets.Mais qui a vieilli très vite, j'ai donc pris la NHibernate et il était vraiment heureux.Les dépôts à l'utilisation NHibernate pour l'accès aux données, et mes besoins d'accès aux données sont assez simples dans cette application particulière.

J'ai une couche de service (exposés via WCF, Duplex canaux), qui utilise les référentiels.Mon application est fondamentalement client-serveur en temps réel de la mise à jour (et je sais que votre question était juste sur les clients, mais je voudrais utiliser les mêmes technologies et des modes).O

n le côté client j'utilise MVP avec StructureMap pour les Cio et quelques très simple agrégation d'événements stratégies pour la croix de communications de classe.Je code pour les interfaces pour à peu près tout.La seule autre chose que je n'ai fait que l'emprunter à partir de la CABINE de l'idée d'un flexible "espace de travail" dynamique de l'affichage des points de vue.J'ai écrit mon propre espace de travail de l'interface si et mis en place mon propre DeckWorkspace et TableWorkspace pour l'utiliser dans mon application (ce sont des choses vraiment simples à écrire).

Beaucoup de mes décisions dans la plus récente de l'application ont été le résultat de l'expérience et de la douleur que j'ai ressenti en utilisant d'autres cadres et d'outils.J'ai pris des décisions différentes cette fois.Peut-être la seule façon de vraiment comprendre comment l'architecte d'une application est de sentir la douleur de faire mal à l'avance.

Je dirais que oui, il pourrait facilement être structuré vers de plus petites applications.Il y a une courbe d'apprentissage vers la prise en main, mais honnêtement, il m'a aidé à comprendre WPF mieux que d'essayer de démarrer à partir de zéro.Après le démarrage d'un projet avec CompositeWPF et ensuite de commencer un autre projet sans elle, je me suis retrouvé tente de reproduire les caractéristiques de CompositeWPF sur mon propre parce que j'ai raté ces fonctionnalités!:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top