Hallo,
Ich versuche gerade aus mehreren Programmierkonzepten/Systemumgebungen für eine Neufassung einer Softwarelösung die optimale zu finden.
Die Ausgangslage:
Das derzeitige System, das in seiner Basis nunmehr schon ca. 9 Jahre auf dem Buckel hat, ist von der Geschäftslogik her fast vollständig mit PL/SQL umgesetzt. Der Hauptteil davon arbeitet mehr oder weniger selbständig. Das machen derzeitig C++-Prozesse, die entweder als Deamons arbeiten oder mittels cronjobs gestartet werden.
Das Benutzerinterface ist ein System mit einer .NET-Serveranwendung und darüber angebundene .NET-Clients die Windows.Forms benutzen (also keine Browseranwendung sondern eine Windows-Rich-Client-Anwendung). Diese Anwendung verwendet Datenbank-Views (deren Daten am Client in Form von ADO.NET Datatables verwaltet werden) bzw. -Stored-Procedures zur Interaktion mit der Oracle-DB.
Der größte Nachteil der Lösung ist, dass diese Anwendung für jedes Kundenprojekt angepasst werden muss, was dazu führt dass der PL/SQL-Code inzwischen schon recht komplex ist. Das ist natürlich für die Wartbarkeit bzw. Erweiterbarkeit nicht gerade zuträglich.
Da jetzt Anforderungen für zukünftige Projekte bestehen, die mit der derzeitigen Lösung nicht bzw. nur bedingt umgesetzt werden können, haben wir uns entschlossen der Anwendung ein Redesign angedeihen zu lassen.
Dabei haben wir uns auch die Frage gestellt, ob wir nicht die Businesslogik des Systems auch aus der Datenbank in eine Java bzw C# Anwendung herausziehen. Das vor allem im Hinblick darauf, das wir uns erwarten, dass eine OO Anwendung, vor allem wenn sie komponentenorientiert aufgebaut wird, wahrscheinlich hinsichtlich der Wart- bzw. Erweiterbarkeit wesentlich einfacher zu handhaben ist als das bestehende Konzept mit PL/SQL.
Egal, welches Konzept letztendlich verwendet wird, eines steht fest, und zwar das Benutzerinterface. Daran soll nichts geändert werden, außer allfällig notwendige Erweiterungen um mit OO-Systemen umgehen zu können, wobei wir versuchen werden, diese Anpassungen, wenn möglich, im neuen System zu implementieren.
Hier eine kurze, unvollständige Plus/Minus Aufstellung der einzelnen Konzepte, soweit ich sie beurteilen kann:
PL/SQL:
- Uns sehr gut bekannte Lösung, da das bisherige System darauf beruht
- An sich recht performant, da die Logik direkt bei den Daten in der Datenbank ausgeführt wird.
- Alle umliegenden Systeme (GUI) sind gut darauf abgestimmt.
- Schlechte Wartbarkeit der Stored Procedures
- Erweiterungen und Adaptierungen sind kompliziert, weil beispielsweise Vererbung in der Datenbank nicht oder nur eingeschränkt[1] möglich ist.
.NET und C#:
- Uns sehr gut bekannte Lösung, da wir schon sehr viel Erfahrung durch die GUI damit haben.
- Anbindung an das GUI-System sind recht einfach zu erledigen (.NET Remoting), da beide Systeme auf der gleichen Technologie beruhen würden.
- Läuft (wahrscheinlich) nur unter Windows[2]
- Damit verbunden ist ein psychologisches Problem, da es doch einige Leute gibt, die der Meinung sind, dass Server-Anwendungen unter Unix/Linux zu laufen haben.
- Im Vergleich zu den anderen beiden Lösungen gibt es recht wenig an Komponenten um eine solche Serveranwendung zu erstellen. (Beispiel: kein Applikationsserver, der den Namen verdienen würde)
Java bzw Java EE (5):
- Angeblich im Serverumfeld eine stabile Lösung, da J2EE bzw. Java EE doch schon einige Zeit verfügbar ist und sich inzwischen auch recht gut entwickelt hat.
- Applikationsserver, die schon einiges an Infrastruktur mitbringen, die man mit .NET selbst entwickeln müsste.
- Läuft auf vielen Plattformen
- Wir haben wenig bis keine Erfahrungen mit Java (könnte man aber mit zusätzlichen Mitarbeitern ausgleichen)
- Ich bin mir nicht sicher ob Applikationsserver für diese Art von Anwendungen geeignet sind, da alles was ich bisher darüber gelesen habe den Verdacht aufkommen ließ, dass es sich dabei um hochmotorisierte Webserver handelt (naja, nicht ganz, aber so ähnlich)
So, was meint ihr dazu? Was würdet ihr machen, und warum? Liege ich/wir komplett falsch mit unseren Überlegungen? Und überhaupt, wie macht man heutzutage so eine Software?
Ich danke euch im voraus schon für allfällige Hilfestellungen/Denkanstöße.
Grüße
Klaus
[1] Ich weiß, dass Oracle auch Objekte und Vererbung kennt, aber ob das auch wirklich zielführend ist??
[2] Inwieweit Mono heute schon brauchbar für kommerzielle Anwendungen wie unsere ist, kann ich nicht beurteilen