C#-Projekt: Einstieg

Ich bin nun schon eine Zeit an meinem neuen “Groß”-Projekt zugange und habe heute erst angefangen zu programmieren. Die Zeit bis jetzt habe ich für den Entwurf des Systems in UML gebraucht und dessen Abstimmung mit den anderen Anwendern. Obwohl die Anwendung jetzt nicht sooo umfangreich ist, habe ich doch einige kleinere Designfehler im ersten Entwurf gemacht, die ich tatsächlich nur anhand des UML-Diagramms beheben konnte. Dadurch habe ich meiner Meinung nach durchaus Zeit eingespart. Das Fixen im Quellcode zu einem späteren Zeitpunkt hätte sicherlich länger gedauert. Und auch der Überblick über das System als Ganzes ist bei einem übersichtlichen Diagramm einfach besser, sodass ich neue Features recht schnell modellieren konnte. Man sollte es nicht glauben, aber die Dozenten haben tatsächlich Recht, wenn sie propagieren, dass die Designphase die wichtigste bei der Softwareentwicklung ist 🙂

Ich habe mal meinen bisherigen Entwurf angehängt. Dieser besteht zwar nur aus 2 Diagrammen, aber die reichten mir zusammen mit dem ERM erstmal, um mit den Anwendern die Funktionen und die Struktur besprechen zu können. Ich habe versucht, mich an die Vorgehensweise im Buch “UML 2 projektorientiert” zu halten, in dem die Autoren auch nur die ihrer Meinung nach wichtigsten und sinnvollsten Diagramme verwenden. Das wären hauptsächlich Use-Case- und Klassendiagramme. Sequenzdiagramme zum Beschreiben der einzelnen Vorgänge habe ich mir gespart, weil die Funktionen nicht allzu komplex sind.

  • Use-Case-Diagramm
    Use-Case-Diagramm
  • Klassendiagramm
    Klassendiagramm
  • Entity-Relationship-Modell
    Entity Relationship Modell

Dazu sollte man vielleicht wissen, was das Programm eigentlich machen soll. Grob gesagt, soll es einige Berechnungen kontrollieren, die unser Bestandsführungssystem im Rahmen der sogenannten Beitragsanpassung (BAP) durchführt. Dazu muss es für jede versicherte Person mit Hilfe der sogenannten Kommutationswerte bestimmte Daten ermitteln und dann einige Werte berechnen.

Auf jeden Fall bin ich heute in die Programmierung der Client-/Server-Verbindung eingestiegen, die ich mittels .NET-Remoting abbilden werde. Und bisher läuft auch alles ganz gut. Nur die ständigen Sicherheitseinstellungen nerven mich tierisch. Jede Assembly muss mit einem Schlüssel signiert und dieser in der .NET-Konfiguration unter Windows eingetragen werden, damit sie z.B. auf die Netzwerkschnittstelle oder das Dateisystem zugreifen kann (siehe Link). Aber ansonsten klappt das Remoting echt super. 3-4 Zeilen Code reichen, um die Verbindung herzustellen. Hier ist die Methode um mit dem Server zu verbinden aus dem Client-Programm:

/// /// Verbindet mit dem Server. /// public void ServerVerbinden() { // mit Server verbinden try { // Konfiguration updaten this.cfg.ReadFile(); // listen-only TCP-Channel erstellen this.chan = new TcpChannel(0); ChannelServices.RegisterChannel(this.chan); Object obj = RemotingServices.Connect(typeof(AOApps.InterfacesNS.IServer), "tcp://" + this.cfg.sections["Netzwerk"].settings["Server"].value + ":" + Convert.ToInt32(this.cfg.sections["Netzwerk"].settings["TcpPort"].value) + "/" + this.cfg.sections["Netzwerk"].settings["EndPunkt"].value); this.server = obj as AOApps.InterfacesNS.IServer; this.IstVerbunden = false; this.IstVerbunden = this.server.TesteVerbindung(); } catch (System.Exception ex) { this.ServerTrennen(); throw new Exception("Konnte nicht mit dem Server verbinden:n" + "Server: " + this.cfg.sections["Netzwerk"].settings["Server"].value + "n" + "Port: " + this.cfg.sections["Netzwerk"].settings["TcpPort"].value + "n" + "EndPunkt: " + this.cfg.sections["Netzwerk"].settings["EndPunkt"].value + "n" + "Meldung: " + ex.Message); } }Die Zeilen 12-17 führen die eigentliche Verbindung durch, während der Rest Fehlerbehandlung bzw. auslesen der Konfiguration ist. Diese habe ich übrigens selbst programmiert, da mir die interne Konfigurationsmöglichkeit nicht ausreicht. Anhand eines Probekapitels aus dem Buch C# Codebook habe ich einen guten Einstieg gefunden, um meine Klasse “Config” noch ein wenig auf meine Bedürfnisse anzupassen (z.B. dem Anwender ein Formular zum Ändern zur Verfügung zu stellen). Die Konfiguration läuft nun komplett über XML-Dateien, die beliebig um zusätzliche Einstellungen erweitert werden können.

  • Download Assembly “Config”: Config.zip (72 KB)

Über Stefan

Polyglot Clean Code Developer

Ein Kommentar

  1. Pingback:C#-Projekt: Konfigurationsklasse » Stefan Macke

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax