Was steckt im Softwarekern?

Jul 20

Was steckt im Softwarekern?

Softwarekern, Kernel, Core, Basis, Engine, … es gibt viele Namen für den fundamentalen Bestandteil einer Software, den Entwickler nutzen um das letztliche Produkt zu gestalten und entwickeln. Immer wieder wenn ich damit anfange eine Software von Grund auf zu gestalten, stelle ich mir folgende Fragen:

  1. Was soll die Software leisten?
  2. Wie soll sie aussehen?
  3. Wer ist die Zielgruppe?
  4. Welche Technologien setze ich ein?

Hat man sich mit den grundsätzlichen Fragen für die Software etwas näher beschäftigt und abgegrenzt wie sie funktionieren soll, überlege ich mir in erster Linie wie ich den Kern der Anwendung aufbaue, so dass ich später weniger Arbeit mit der Implementierung habe. Doch was genau ist denn Bestandteil eines Softwarekerns? Diese Frage lässt sich nicht immer allgemein beantworten, da die Bestandteile eng mit der Funktionsweise und den Anforderungen zusammenhängen. Ein Spiel hat grundlegend andere Anforderungen als eine Businesssoftware.

Was steckt im Kern?

Nun ist es aber auch so, dass viele Anforderungen an eine Software immer wieder kehren. Zumindest im Bereich der Businesssoftware wo ich mich größtenteils bewege.

  1. Logging ( Für den Fehlerfall oder für den Anwender )
  2. Bereitstellen von Resourcen ( Zumindest für den Entwickler )
  3. Event Communication ( Wenn an Stelle A etwas gemacht wurde muss Stelle B davon erfahren )
  4. Navigation ( Menü, Browserlike Navigation o.ä. )
  5. Region Management ( an welcher Stelle kommen Visuals zum Einsatz )

Für alle diese Punkte gibt es natürlich Frameworks die man einsetzen kann. nLog fürs Logging, Teile von PRISM für Event Communication und Region Management und/oder Navigation. Doch stellt dann eine wilde Mischung aus Assemblies den Kern der Anwendung dar? Für meine Begriffe sollte der Kern einer Anwendung aus einer Assembly bestehen die sowohl fremde Assemblies integriert und nach außen genormt anbietet als auch eigene Interfaces und Basisklassen bereitstellt auf denen Entwickler arbeiten können.

Warum erzähle ich das?

Ich habe mittlerweile Einblick in ein paar Softwareunternehmen erhalten und in keinem gab es bisher einen sauberen Softwarekern von dem man sagen könnte, dass er als Leitfaden für Entwickler dienen könnte um die Anwendung weiter zu entwickeln. Für meine eigenen Entwicklungen jedoch möchte ich einen solchen Kern entwerfen, auf dessen Basis ich in Zukunft kleinere Projekte einfach und komfortabel auf WPF Basis entwickeln kann.

Meine Anforderungen an den Kern

  1. Pluginfähig ( Es sollen Module an- und abgekoppelt werden können )
  2. Browserlike ViewModel Navigation ( Tabbasierte in Frame Navigation wie in einem Browser )
  3. Logging ( Sowohl für mich auf einer Konsole als auch an andere Schnittstellen )
  4. Event Communication ( Nutzen eines Message Bus )
  5. MVVM Basisfunktionalitäten ( EventToCommand, ViewModelBases usw. )
  6. Resourcenmanagement ( DataTemplates komponieren )