2016-04-21 16 views
-2

Ich arbeite an einer etwas größeren C# -Anwendung und kämpfe darum, eine wartungsfreundliche Struktur dafür zu definieren.Hinweis für die Erstellung von Software

Ich bin mir bewusst, dass die Frage, die ich stellen möchte, breit und subjektiv ist, aber ich kann nicht finden, wonach ich suche. Alles, was ich finden kann, sind die üblichen Designmuster/Namenskonventionen/eher einfache Beispiele, die nichts mit der Realität zu tun haben.

Um noch eine etwas bestimmte Frage zu stellen, dachte ich an meine zwei Hauptprobleme. Ich habe eine Client-Server-Anwendung. Für die Client-Anwendung habe ich einige Schnittstellen definiert und eine Art Abhängigkeitsinjektion verwendet. Nun, für 2 Fragen:

  1. Eine Klasse, die beim Start ausgeführt wird, sagt das ‚Programm‘ (nicht die Klasse „Programm“, aber es könnte genauso gut sein) ist ziemlich groß, nutzt alles und es tut alles sortieren Sie Dinge (schließen Sie Ereignisse an allen Klassen an, behandeln sie, weisen UI, Einstellungen, usw. an). Dies scheint nicht zu halten (in etwa 4 Wochen habe ich vergessen, was auch immer dort passiert). Ist es normal, 1 Klasse alles zusammen zu stringieren? (Gibt es tolle Beispiele dafür?)

  2. Ich habe (unter anderem) Schnittstellen für die Serververbindung, Setupprovider und Uimanager. Die Implementierung der Serververbindung beruht jedoch auf einem Settingprovider für lokale Einstellungen, der Setupprovider stützt sich auf die Serververbindung für Servereinstellungen, die ui muss mit beiden kommunizieren (z. B. Anmelde-/Anmeldefenster und Einstellungen anzeigen) und so weiter. Grundsätzlich - sagen wir mal - hängt alles von allem ab. Ich benutze Schnittstellen, aber immer noch. Insbesondere beim abstrahieren von Teilen kann das ziemlich verwirrend sein: Nehmen wir an, ich möchte das Einstellungsfenster anzeigen, der uimanager fragt den Setupprovider, der wiederum die serverconnection benötigt, dann bricht die Verbindung ab und irgendwo entlang der Zeilen ergibt sich eine Ausnahme. Sollte der UImanager sich darüber im Klaren sein, dass es nicht möglich ist, den Setupprovider aufzurufen, wenn die Serververbindung unterbrochen ist ??? Sind diese 2 Probleme (alles hängt von allem ab und alle Klassen überwachen den jeweils anderen Zustand) vermeidbar?

Alle beraten/lesen Quellen sehr geschätzt.

+0

Das ist ziemlich breit. Für Ihre erste Frage werfen Sie einen Blick auf "winforms Design Patterns" in Ihrer bevorzugten Web-Suchmaschine. Model-View-Presenter wird oft geprägt, ebenso wie "Smart Client" und "Model-View-ViewModel". – CodeCaster

+0

Vielen Dank für Ihre Eingabe. Ich bin mir bewusst, dass das breit ist - ich sage es sogar in der zweiten Zeile. Ich hatte gehofft, dass die zwei spezifischen Fragen es ein wenig verengten. Nach dem negativen Ergebnis zu urteilen, habe ich versagt. Außerdem habe ich MVP/MVVM-Sachen gelesen, bevor ich diese Frage gestellt habe. Die Sache ist, dass ich nicht in der Lage bin, diese Prinzipien in die Praxis umzusetzen, wenn ich meine Anwendung entwerfe. Ich hoffe, ich bin nicht der Einzige, der sich mit diesen Fragen abmüht, denn das könnte bedeuten, dass ich mich nach einem anderen Job umsehen sollte :) – user1515791

Antwort

0

Ist es normal, 1 Klasse alle zusammen zu string?

Es ist nicht unnormal - das ist wie ein Startskript. Es ist normalerweise nicht so sehr "alles", als "andere Methoden an geeigneten Orten aufzurufen, um ihre Dinge in einer bestimmten Reihenfolge zu tun". Dies wird oft auch Bootstrapping genannt.

Für 2:

Allgemeines - ein Zeichen von jemandem Spur zu verlieren und eine Mischung aus Abhängigkeiten zu schaffen.

+0

"ein Zeichen, dass jemand den Überblick verliert" - einverstanden, :) Aber wie kann man es vermeiden? – user1515791

+0

Mehr Planung. Klassischer Hierarchiebaum für Klassen. Ein gewisses Maß an Interdependenz ist nicht vermeidbar, aber im Allgemeinen - vielleicht vermissen Sie ein richtiges Modell. Zum Beispiel: serverbindung hängt von einem Settingprovider ab - WARUM? Die Serververbindung FACTORY kann sich auf einen Einstellungsanbieter stützen, aber die Verbindung selbst hat ihre Verbindungszeichenfolge und ist beendet. – TomTom

+0

Ok, ich verstehe deinen Standpunkt. Aber was ist umgekehrt? Nehmen wir an, dass die Einstellungen immer 'frisch' sein sollten, wenn der UImanager einen Einstellungsbildschirm anzeigen möchte und somit die Serververbindung benötigt wird. Sollte der UImanager den Serverstatus kennen? Oder gehe ich die Schnittstellen falsch wählen? – user1515791

0

Wenn Sie nicht planen, haben Sie vor zu scheitern. Ein typischer Software Development Life Cycle (SDLC) umfasst Anforderungsdefinition, Systemdesign, Programmspezifikationen, Entwicklung, Test und Implementierung. Das klingt aber wirklich langweilig.

Ihr Projekt klingt wie ein persönliches Projekt. Es wäre unvernünftig zu sagen, dass Sie einem vollständigen SDLC folgen müssen, aber es hilft, den Prozess zu verstehen. Es ist ein ganz normales Verhalten, einfach den Code zu schreiben und die Details auszuarbeiten. Ich tue es. Ich verstehe. Ich verstehe auch, wie wichtig es ist, zuerst zu entwerfen, was ich tun muss.

Eine "ziemlich große" Klasse kann ein Symptom der Nichtplanung sein.Sie werden lernen, wie Sie bei der Planung besser tun können, bis zu einem gewissen Grad ist die beste Lösung Erfahrung. Offensichtlich liefert dein Projekt dir Erfahrung.

Es gibt eine Fülle von Material, einschließlich Hunderten von Büchern, verfügbar auf SDLC und die meisten von ihnen sind langweilig und benötigen viele Stunden, um durchzukommen. Die meisten Bücher über UML haben eine frustrierend lange Erklärung, wie man Software entwickelt. Es gibt viele Bücher über OOP Design. Klassen, bei denen zwei Klassen voneinander abhängig sind, sollten vermieden werden. Daher würde das OOP-Design helfen zu verstehen, wie dies vermieden werden kann.

Ich kenne kein einfaches CASE-Tool (Computer Aided Software Engineering), das zwar einfach, aber funktional genug für persönliche Projekte ist, aber ich bin daran interessiert, so etwas zu wissen.

Es hilft zu denken, in Bezug auf die Gestaltung Ihrer Software zuerst und beschreiben Sie es sich selbst so gut wie möglich. Der Vorteil ist, dass Sie das Design viel einfacher neu gestalten können, wenn es noch konzeptionell ist. Je besser Sie Ihre Software konzeptionell behandeln können, desto besser können Sie sie entwerfen. Der beste Weg, dies zu tun, ist, was für Sie am besten funktioniert.

+0

Es ist ein persönliches Projekt, kommerzialisiert :) daher auch der Mangel an Planung, es wuchs einfach und wuchs bis zum heutigen Zeitpunkt. Sie sagen, es gibt Hunderte von Büchern über OOP-Design (und ich glaube das), aber kennen Sie irgendwelche praktischen, guten Bücher? Die meisten von ihnen werden mit Beispielen ausgeliefert, die einen Punkt zeigen, aber diese Beispiele sind praktisch kaum anwendbar. Ich tendiere dazu, einen 2 UML-Klassen zu starren - wonderering, wo ich als nächstes - und dann frustriert .... – user1515791

+0

Ich verstehe die Frustration. Es ist schwierig, ein gutes Buch zu irgendeinem Thema zu finden. Es tut mir leid, dass ich mit einem Vorschlag nicht helfen kann. – user34660

Verwandte Themen