ITMAGAZINE Open-Source-Frameworks im .Net-Umfeld 29. April 2005 - Auf .Net portierte Java-Tools und -Frameworks helfen Programmierern dabei, die Entwicklung zu vereinfachen und zu beschleunigen. Open-Source-Software wird meistens als Gratis-Software unter Linux oder mit Java in Verbindung gesetzt. Vielfach geht dabei vergessen, dass es auch im Microsoft-Umfeld sehr viele und qualitativ hochwertige Open-Source-Projekte gibt. Gerade in der Software-Entwicklung werden häufig sogenannte Frameworks eingesetzt, um den Aufwand in der Programmierung zu minimieren. Praktisch jeder Software-Entwickler im Linux- oder Java-Umfeld setzt beispielsweise wie selbstverständlich auf Teilprojekte der Apache Software Foundation. Hingegen ist es interessant, dass Programmierer, die mit .Net auf der Microsoft-Plattform arbeiten, weitgehend auf den Einsatz von Open Source verzichten. Dies rührt oftmals daher, dass die Kombination von Open Source und .Net als Widerspruch angesehen wird, obwohl es sogar eine Open-Source-Implementierung von .Net mit dem Projektnamen Mono gibt. Vorteil Open Source Dabei bringt der Einsatz von Open Source bei Frameworks viele Vorteile. Jeder Interessierte kann den Source Code herunterladen und beliebig studieren. Dadurch, dass ein Open-Source-Framework nicht nur von den Autoren eingesehen werden kann, sondern auch von Tausenden von Programmierern beim Einsatz überprüft wird, bietet sich ein enorm grosses Potential bei der Qualitätssicherung gegenüber herkömmlichen geschlossenen Produkten. Jedermann hat dadurch die Möglichkeit, Fehler zu entdecken, diese den Autoren zu melden oder gar selber in der Community mitzuarbeiten und Fehler zu eliminieren. Entgegen vielen Befürchtungen läuft dies aber nie unkontrolliert ab, sondern wird immer durch die Community gesteuert. Doch die Frameworks stammen nicht immer von Anfang an aus der Community. Es kann auch passieren, dass aus geschlossenen Projekten einzelne kleine Teilbereiche herausgelöst werden und als Open Source öffentlich und kostenlos zugänglich gemacht werden. Besonders stark ist diese Bewegung in der Java-Community. Unter den Software-Entwicklern, die Java einsetzen, ist es selbstverständlich, dass Open-Source-Frameworks tagtäglich zum Einsatz kommen. Daher ist es nicht verwunderlich, dass viele Frameworks auch mittlerweile von Java auf die .Net-Plattform portiert und teilweise gar mit plattformspezifischen Eigenheiten erweitert wurden. Nachfolgend wollen wir einige Beispiele vorstellen, die dem einen oder anderen (ehemaligen) Java-Entwickler durchaus bekannt vorkommen dürften. Log4net: Kampf dem Fehlerteufel Log4net ist eine Portierung vom bekannten Java-Logging-Framework log4j und ist mittlerweile auch von der Apache Software Foundation aufgenommen worden. Da praktisch in jedem Projekt Logging-Funktionalität – auch wenn nur zum Debuggen – benötigt wird, ist dieses Framework als Quasistandard zu betrachten. Unter Java wird es schon seit Jahren erfolgreich in praktisch allen Projekten eingesetzt. es schon seit Jahren erfolgreich in praktisch allen Projekten eingesetzt. Das Spezielle an log4net ist die enorm einfache Anwendbarkeit bei einer ausgesprochen grossen Flexibilität. Dies wird dadurch erreicht, dass das Schreiben von Log-Messages über hierarchische Strukturen realisiert wird und das Verhalten komplett durch die Konfiguration gesteuert werden kann. Ein einfaches Beispiel, wie der Logger eingesetzt werden kann: using log4net; namespace netiva.Lots { public class MainApp { private static readonly ILog log = LogManager.GetLogger (typeof(MainApp)); public void DoIt() { log.Debug("Did it again!"); } } } Die grosse Flexibilität von log4net ist durch seine Konfigurierbarkeit bedingt. Es existiert ein sehr umfangreiches Set von sogenannten Appenders, die beliebig erweitert werden können. Ein Appender dient dazu, bestimmte Log-Messages, die praktisch beliebig formatiert werden können, an ein bestimmtes Ziel wie eine Datei oder eine Datenbank zu übergeben. Mittlerweile existieren mehrere Implementierungen, die neben der Übergabe an Datenbanken oder Dateien unter anderem auch Fehlermeldungen an spezielle Logging-Applikationen übergeben können: • ADONetAppender • ASPNetTraceAppender • ConsoleAppender • EventLogAppender • FileAppender • MemoryAppender • NetSendAppender • OutputDebugStringAppender • RollingFileAppender • SMTPAppender • TraceAppender • UdpAppender • RemotingAppender Das Bild auf Seite 42 zeigt eine einfache Konfiguration mit zwei verschiedenen Appenders, um Messages direkt auf der Konsole und in einem File auszugeben. Unit-Testing mit Nunit NUnit ist ein Framework, um automatisches Unit-Testing, das ein elementarer Bestandteil des Extreme Programming ist, möglichst einfach und effizient einzusetzen. NUnit stammt ursprünglich ebenfalls aus der Java-Ecke und wurde vom JUnit Projekt abgeleitet, aber in der aktuellsten Version komplett neu aufgesetzt. Durch die vollständig neue Implementierung werden die Vorteile von .Net vollumfänglich in NUnit angewendet. So ist durch den intensiven Einsatz von Attributen die Implementierung automatischer Tests äusserst einfach geworden. Ein einfacher Test wird gemäss folgendem Beispiel aufgesetzt: namespace bank { using NUnit.Framework; [TestFixture] public class AccountTest { [Test] public void TransferFunds() { Account source = new Account(); source.Deposit(200.00F); Account destination = new Account(); destination.Deposit(150.00F); source.TransferFunds (destination, 100.00F); Assert.AreEqual(250.00F, destination.Balance); Assert.AreEqual(100.00F, source.Balance); } } } Ein komplettes Set von Tests kann über mehrere Wege ausgeführt werden. Am komfortabelsten ist der Einsatz vom NUnit GUI-Runner. Einfache Dokumentation Aus einer ganz anderen Sparte kommt das Dokumentationshilfsmittel NDoc. Mit seiner Hilfe kann auf sehr flexible Weise eine professionelle Dokumentation aus dem Source Code erstellt werden, wie dies Beispielsweise von JavaDoc schon seit langem bekannt ist. Die Dokumentation wird mit XML-Tags direkt in den Source Code als speziell formatierten Kommentar eingefügt. Als Ergebnis spuckt NDoc die Dokumentation in Form einer Windows-Hilfe-Datei (chm) aus, wie sie aus dem MSDN bekannt ist. Dank dem Einsatz von NDoc steigt auch die Motivation im Team, sauber dokumentierten Source Code zu erstellen. Es vereinfacht dadurch gerade die Zusammenarbeit mit mehreren Entwicklern. Ziel sollte letztlich sein, keine mühselige Dokumentation mehr in einer Textverarbeitung erstellen zu müssen, da diese meistens sowieso schon nach kurzer Zeit veraltet ist. Nant NAnt ist eigentlich ein Script-Interpreter, um automatisch komplette und auch komplexe Projekte einem Build-Prozess zuzuführen. Aus der Unix-Welt waren die Build-Prozesse schon lange bekannt, sind aber erst nach und nach über Java zu .Net geschwappt. Durch die immer komplexer werdenden Build-Strukturen wurde in Java das Ant Projekt ins Leben gerufen, um über eine XML-Sprache flexible Build-Abläufe festzulegen. NAnt ist eine Portierung der Java-Umsetzung, bietet aber zum aktuellen Zeitpunkt noch nicht den gesamten Funktionsumfang der Originalversion. CruiseControl Bei der Software-Entwicklung im Team kommen immer mehr Tools zum Einsatz, die die «Continous-Integration» ermöglichen. Mit solchen Tools wird laufend während der Arbeit das komplette Projekt im Hintergrund aus der Versionsverwaltung ausgecheckt, vollständig kompiliert, zum Deployment vorbereitet und dann durch die automatischen Unit-Tests auf Herz und Nieren geprüft. Durch diesen automatischen und dauernden Prozess kommt es nicht mehr vor, dass tagelang Teile entwickelt werden, die am Schluss nicht richtig zusammenpassen. CruiseControl ist eines der möglichen Werkzeuge, um diesen automatischen Prozess auf einfache Weise aufzusetzen. Der Autor Adrian Wildermuth ([email protected]) ist Mitgründer der Berner Netiva und seit acht Jahren als Consultant und externer Mitarbeiter im Bereich von Architektur, Design und Implementierung von unterschiedlichsten Projekten tätig. Copyright by Swiss IT Media 2017