2008-09-05 16 views
7

Ich habe eine einfache Desktop-Anwendung in C# 3.0 erstellt, um einige C#, WPF und. NET 3.5 zu lernen. Meine Anwendung liest im Wesentlichen Daten aus einer CSV-Datei und speichert sie in einer SQL Server CE-Datenbank. Ich benutze sqlmetal, um den ORM-Code für die Datenbank zu generieren. Meine erste Version dieser App ist hässlich und ich bin dabei, sie zu refaktorisieren.Wie würden Sie eine Desktop-Anwendung in C# 3.0 erstellen

Was bringt mich zu meiner Frage. Wie würden Sie eine Desktop-Datenbank-App in C# erstellen? Was sind die besten Praktiken?

Erstellen Sie eine Datenbankabstraktionsschicht (DAL), die den sqlmetal generierten Code verwendet? Oder ist der generierte Code genug von einer Abstraktion?

Wenn Sie DAL-Muster verwenden, machen Sie es zu einem Singleton oder statischen Element? Verwenden Sie das View-Model-ModelView-Muster mit dem DAL-Muster?

Entschuldigung, wenn das wie eine lange offene Frage scheint, aber ich habe in letzter Zeit viel darüber nachgedacht. Ich sehe viele Beispiele dafür, wie man eine Unternehmens-N-Tier-App in C# erstellt, aber nicht so viele, um eigenständige Desktop-Apps zu erstellen.

Antwort

4

ich mit dem Composite Application Guidance for WPF (Husten PRISM Husten) von der Microsoft-P & P-Team starten würde. Mit dem Download kommt eine großartige Referenzanwendung, die heute den Ausgangspunkt für die meisten meiner WPF-Entwicklungen darstellt.

Die DotNetRocks crew gerade interviewt Glenn Block und Brian Noyes darüber, wenn Sie daran interessiert sind, mehr von ihnen zu hören.

Noch besser, Prism ist bei weitem nicht so schwer wie das CAB, wenn Sie überhaupt damit aus den WinForms Tagen vertraut sind.

1

Bevor Sie irgendetwas entwerfen, sollten Sie die Anforderungen für Ihre App definieren.
Es ist ein häufiger Fehler von Anfänger-Entwicklern - mit dem Schreiben von Code vor dem Nachdenken darüber, wie es funktionieren würde. Mein Rat wird sein, zu versuchen, einige Eigenschaften Ihrer Anwendung zu beschreiben. Es wird Ihnen helfen zu fühlen, wie es umgesetzt werden sollte.

Wie für nützliche Lernressourcen würde ich Ihnen wärmstens empfehlen, einen Blick auf CompositeWPF zu werfen, es ist ein Projekt speziell entwickelt, um Entwickler Best Practices der Desktop-App-Entwicklung zu lehren.

2

Die Antwort lautet: "Es kommt darauf an" wie immer.

Ein paar Dinge, über die Sie nachdenken sollten: Sie möchten vielleicht diese fette Client-App irgendwann zu einer Web-App machen (zum Beispiel). In diesem Fall sollten Sie die Trennung zwischen der Business-Schicht (und darunter) und der Präsentation sicherstellen. Der einfachste Weg, dies zu tun, ist sicher zu stellen, dass alle Aufrufe an die Geschäftslogik durch irgendeine Schnittstelle gehen. Ein komplexerer Weg ist die Implementierung eines vollständigen MVC-Setups.

Eine andere Sache, die Sie in Betracht ziehen können, ist, die Datenzugriffsebene unabhängig von der Geschäftslogik und der Benutzerschnittstelle zu machen. Damit meine ich, dass alle Anrufe von der Geschäftslogik in die DAL generisch sein sollten, "hol mir diese Daten" anstatt "hol mir diese Daten aus SQL" oder schlimmer noch "führe diese SQL-Anweisung aus". Auf diese Weise können Sie Ihre DAL durch eine ersetzen, die auf eine andere Datenbank, XML-Dateien oder sogar etwas Ekliges wie flache Dateien zugreift.

Kurz gesagt, Trennung von Bedenken.Dadurch können Sie in der Zukunft wachsen, indem Sie eine andere Benutzeroberfläche hinzufügen, alle drei Bereiche in ihre eigene Ebene segmentieren oder die relevante Technologie ändern.

0

Ich würde sagen, ja, es könnte leicht zu kleineren Anwendungen strukturiert werden. Es gibt eine Lernkurve für den Anfang, aber ehrlich gesagt hat es mir geholfen, WPF besser zu verstehen, als von Grund auf neu anzufangen. Nachdem ich ein Projekt mit CompositeWPF gestartet und dann ein anderes Projekt ohne es gestartet habe, habe ich selbst versucht, Features von CompositeWPF zu duplizieren, weil ich diese Funktionen verpasst habe! :)

1

Ich würde mit Jeremy Miller Build Your Own Cab Serie beginnen.

Ich war ein früher CAB-Anwender. Ich habe viel gelernt, als ich mich in diese Technologie vertieft und alle .NET-Blogs über die Anwendungsarchitektur gelesen habe.

Aber vor kurzem hatte ich eine Chance, ein neues Projekt zu beginnen, und anstatt CAB zu verwenden, ging ich mit StructureMap & NHibernate und geliehen einige der Muster, die Jeremy verwendet (insbesondere seine Art der Handhabung von Ereignisaggregation). Das Ergebnis war ein wirklich vereinfachter, von Hand gearbeiteter Rahmen, der alles tut, was ich brauche, und ich liebe es, damit zu arbeiten.

Zu den Besonderheiten Ihrer Frage: Ich verwende ein Repository für den Datenzugriff. Ich habe ursprünglich etwas ADO.NET-Code geschrieben und Datenlesegeräte verwendet und meine Objekte zugeordnet. Aber das wurde wirklich schnell alt, also habe ich NHibernate geschnappt und war sehr zufrieden. Die Repositories verwenden NHibernate für den Datenzugriff und meine Datenzugriffsanforderungen sind in dieser speziellen App ziemlich einfach.

Ich habe eine Service-Schicht (ausgesetzt über WCF, Duplex-Kanäle), die die Repositories verwendet. Meine App ist im Grunde Client-Server mit Echtzeit-Aktualisierung (und ich weiß, dass Ihre Frage nur über Clients war, aber ich würde die gleichen Technologien und Muster verwenden). O

Auf der Client-Seite verwende ich MVP mit StructureMap für IoC und einige sehr einfache Event-Aggregation-Strategien für klassenübergreifende Kommunikation. Ich kodiere Schnittstellen für fast alles. Die einzige andere Sache, die ich gemacht habe, war, von der CAB die Idee eines flexiblen "Workspace" zur dynamischen Anzeige von Ansichten zu übernehmen. Ich habe jedoch meine eigene Workspace-Oberfläche geschrieben und meinen eigenen DeckWorkspace und TableWorkspace zur Verwendung in meiner App implementiert (das waren wirklich einfache Dinge, die man schreiben konnte).

Viele meiner Entscheidungen in dieser neuesten Anwendung waren das Ergebnis von Erfahrungen und Schmerzen, die ich mit anderen Frameworks und Tools fühlte. Ich habe diesmal andere Entscheidungen getroffen. Vielleicht ist der einzige Weg, um wirklich zu verstehen, wie man eine Anwendung erstellt, der Schmerz zu sein, es vorher falsch zu machen.

Verwandte Themen