Coding Dojo: Admin Toolbox

Um unsere Codin Dojos praxisnah und gleichzeitig sinnvoll zu gestalten, haben wir mit der Admin Toolbox begonnen, eine Sammlung von kleinen Tools zu programmieren, die unseren Systemintegratoren die alltäglichen Verwaltungsaufgaben erleichtern sollen.

Das Projekt, mit dem wir in diesem Rahmen begonnen haben heißt Directory Observer. Die Hauptanforderung an das Programm war, einen, vom Benutzer bestimmten, Ordner zu überwachen. Es soll regelmäßig geprüft werden, welche Dateien im Ordner vorhanden sind. Wenn Dateien länger als 10 Minuten im Ordner liegen, soll eine Warnungsemail mit den Dateinamen in Form einer Liste versendet werden.

Bevor wir mit dem Programmieren beginnen konnten, mussten wir uns auf eine Struktur einigen. Wie sollten die Anforderungen hinreichend und zufriedenstellend umgesetzt werden? Wir wollten keinen permanent laufenden Dienst haben, also entschieden wir uns für die Realisierung dieser Anforderung durch eine Aufgabe, die alle 10 Minuten ausgeführt werden sollte. Um uns die Struktur, die wir benötigten, besser vorstellen zu können, haben wir eine kurze User Story erstellt:

Verzeichnis muss überwacht werden.

Dateien, deren Erstellungsdatum größer gleich 10 Minuten ist,

müssen per Email gemeldet werden.

Anhand der User Story konnten wir uns Zusammenhänge zwischen den einzelnen Elementen visualisieren und auch gleich darüber diskutieren, welche Architektur für unsere Anforderungen am geeignetsten wäre.

Bevor wir uns in Gruppen aufgeteilt und mit dem Programmieren begonnen haben, wurden gemeinsam Interfaces angelegt und damit die Schnittstellen für unsere Anforderungen festgelegt.

Wir haben diese vier Interfaces angelegt:

public interface ICompareFileLists
{
IList<File> Compare( IList<File> list1, IList<File> list2 ) ;
}

public interface ILoadDirectoryObserver
{
IList<File> ReadFilesFromLastSnapshot ( ) ;

    IList<File> ReadFilesFromCurrentSnapshot ( ) ;
}

interface ISaveDirectoryObserver
{
void SaveCurrentAsSnapshot( ) ;
}
public interface ISendEmails
{
void Send( Mailsettings settings ) ;
}

Die Programmierung sollte modular erfolgen, damit ist gemeint, dass jede Gruppe einen Teil der Programmierarbeit übernimmt, wir dann zum Schluss die Einzelteile zusammenführen und dann sehen, ob die Anforderungen hinreichend erfüllt werden. Die vordefinierten Interfaces waren der gemeinsame Bezugspunkt der Module. Also haben wir unser Projekt in drei Module aufgeteilt, die je einen Punkt der folgenden Auflistung erfüllen sollten:

  • aus einem Verzeichnis Dateien auslesen und das Ergebnis abspeichern
  • eine abgespeicherte Liste mit dem aktuellen Snapshot des Verzeichnisses vergleichen
  • bei Bedarf eine E-Mail senden

Da wir nur zwei Gruppen hatten und die Programmierkenntnisse sehr unterschiedlich sind, haben wir die Aufgaben dementsprechend ungleich verteilt.

Die erste Gruppe hatte die Aufgabe, ein Modul zu schreiben, das zwei Listen vergleicht und eine dritte Liste mit denjenigen Einträgen zurückgibt, die in beiden Listen enthalten sind.

In der gleichen Zeit sollte die zweite Gruppe eine Programmlogik schreiben, um die Directory-Snapshots zu erstellen und in Form von Listen abzuspeichern. Zusätzlich hat die Gruppe dann noch die Logik zum Versenden von Benachrichtigungsemails implementiert.

Nach kurzer Programmierzeit haben wir dann die Einzelteile zusammengefügt und ich musste zu meiner Überraschung feststellen, dass das Zusammenspiel auf Anhieb funktioniert hat. Obwohl wir den Programmcode des jeweils anderen nicht kannten, konnten die Module doch sofort zusammenarbeiten und das gewünschte Ergebnis hervorbringen. Allein durch das gemeinsame Festlegen der Ein- und Ausgabeparameter konnten Module unabhängig voneinander programmiert und anschließend ohne Schwierigkeiten zusammengeführt werden.

In dieser kleinen Übungseinheit konnte ich lernen, wie man ein Projekt aus einer Anforderung in Form einer kurzen Userstory darstellen kann. Anhand der Userstory lässt sich die Architektur des gewünschten Programms bestimmen. Sind Abhängigkeiten und Zuständigkeiten geklärt, werden gemeinsam Schnittstellen definiert und anhand von Interfaces festgelegt. Danach kann man je nach Größe des Projekts und der Anzahl der Programmierer den Programmcode in Module einteilen. So hat jeder Programmierer einen genauen Rahmen an den er sich halten muss, womit sich die Entwicklungszeit für das Programm verringert und die Fehlersuche oder auch Erweiterbarkeit deutlich verbessert werden.

Verfasser: Waldemar Merk

Advertisements

Über hecogmbh

Die heco gmbh ist ein Handelshaus sowie ein Produzent für Fittings und Armaturen aus rostfreiem Edelstahl. Unsere Produkte werden im Maschinen-, Anlagen- und Fahrzeugbau sowohl in der chemischen Industrie als auch in der Nahrungsmittelindustrie eingesetzt. Mit mehreren Standorten europaweit sind wir immer in Ihrer Nähe.
Dieser Beitrag wurde unter Waldemar Merk abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s