Laden...

Von der Idee zum Modell

Erstellt von Zuber vor 2 Jahren Letzter Beitrag vor 2 Jahren 1.078 Views
Z
Zuber Themenstarter:in
4 Beiträge seit 2022
vor 2 Jahren
Von der Idee zum Modell

Hi,

ich bin noch recht neu in der Softwareentwicklung, habe mich aber schon durch mehrere Onlinekurse gearbeitet. Die C# Grundlagen sind mir also grundsätzlich vertraut. Ich tue mich aber noch sehr schwer bei der Umsetzung einer Idee in eine konkrete Applikation. Daher würde ich gerne verstehen, wie andere an die Sache herangehen.

Grundlage meiner Idee ist ein Problem aus meinem beruflichen Umfeld. Wir müssen immer wieder größere Mengen an Messwerten aus einer Produktprüfung gegen vorgegebene Toleranzen abgleichen und daraus ein zusammengefasstes Ergebnis ableiten.

Ich habe also eine vorgegebene Datei (SQLite Datenbank die die Messwerte aus einem Messauftrag enthält) und muss diese gegen Toleranzen abgleichen. Als Ergebnis möchte ich eine Berichtsdatei erzeugen.

Es geht mir an dieser Stelle nicht darum, wie ich eine Datenbankdatei auslese oder das Ergebnis ausgebe, dass sind lösbare Aufgaben für mich. Ich tue mich aber sehr schwer damit, ein Klassenmodell für meine Applikation auf die Beine zu stellen.

Daher meine Frage: Wie kann ich vorgehen, um aus der Idee eine solide Applikation zu entwickeln?

Viele Grüße
Zuber

4.931 Beiträge seit 2008
vor 2 Jahren

Hallo und willkommen,

am besten, du denkst hierarchisch dabei, d.h. du teilst die Aufgaben in Teilaufgaben auf und erzeugst dafür dann entsprechende Klassen (bei dir also "SQLite-Datenbank Zugriff", "Berichtsdatei erzeugen", "Toleranzen vergleichen"-Logik, sowie ein Hauptprogramm - je nach Projekttyp, z.B. Konsole oder GUI).

Generell für eine Applikation gilt (in den meisten Fällen) die [Artikel] Drei-Schichten-Architektur, d.h. du hast mindestens 3 verschiedene Hauptklassen (also mindestens 1 je Schicht).
Wie du (nach Durchlesen des Artikels) siehst, paßt also meine obige Aufteilung gut zu dieser generellen Architektur.

Und genauso gehst du dann bei anderen Projekten vor und entwickelst zuersteinmal die Grobstruktur und fügst dann nach und nach weitere benötigte Klassen zu den einzelnen Schichten hinzu (bei kleineren bis mittelgroßen Projekten reicht dafür einfach ein Order je Schicht, bei größeren Projekten, wenn einzelne Teile auch in anderen Projekten benötigt werden, erzeugt man dann Libraries (Assemblies) je Schicht, evtl. noch mit passenden Schittstellen (interface)).

Z
Zuber Themenstarter:in
4 Beiträge seit 2022
vor 2 Jahren

Hallo Th69,

danke für den Hinweis auf das 3-Schichten-Modell. Das hilft mir schon mal weiter.

Die Datenzugriffsschicht ist mir für mein Projekt noch nicht so klar. Ich hätte jetzt im ersten Schritt die Datenklassen geschrieben, die beschreiben, aus welchen Feldern und Methoden ein Messwert bzw. eine Toleranz besteht. Danach hätte ich dann Zugriffsklassen geschrieben, die z.b. eine XML-Datei lesen und daraus die Toleranzobjekte erzeugen, damit die Datenquelle unabhängig von den zu verarbeitenden Daten bleibt. Oder gehören die Datenklassen schon in die Geschäftslogikschicht?

Die Präsentationsschicht (Konsole oder GUI) würde dann nur eine Referenz auf die Datenquellen an die Datenzugriffsschicht übergeben (Dateipfade für Messwerte und Toleranzen) und nach dem Vergleichen der Toleranzen und Messwerte (Logikschicht) die Ergebnisse anzeigen und bei Bedarf in eine Datei schreiben (Präsentationsschicht liefert hier den Pfad, Logikschicht die Ergebnisse und die Datenzugriffsschicht exportiert diese in eine Datei).

Bin ich bis hierhin auf dem richtigen Weg mit dem 3-Schichten-Modell?

Grüße
Zuber

16.806 Beiträge seit 2008
vor 2 Jahren

Auf Deine Frage gibt es leider keine pauschale Antwort - es gibt hier einfach viel zu viele Vorgehensmodelle.
Bottom Up vs. Top Down sind da auch nicht die oberste Schicht - aber wie eine Idee oder ein Problem in eine Lösung gemünzt wird: tausende Wege, jedes Team entscheidet das für sich.

Ich tue mich aber sehr schwer damit, ein Klassenmodell für meine Applikation auf die Beine zu stellen.

Musst Du das denn überhaupt, wird das erfordert?
Viele moderne Architekturprinzipien haben zwar Datenmodelle, aber keine "Business Modelle" (ich vermute, dass Du das mit Klassenmodelle meinst).
Moderne Architekturen wie CQRS arbeiten mit Zustandsveränderungen und Projektionen - nicht mit mächtigen, überladenen Business Modellen.

Dieses Forum hier hat nicht ein einziges Business Modell.
Es besteht nur aus den Prinzipien von CQRS und 2 verschiedenen Daten-Modell-Prinzipien (Entitäten und Projektionen), siehe [Artikel] Die myCSharp.de Software Architektur
Das ist auf jede Art von Anwendung anwendbar.

Aber im Endeffekt ist das Erfahrung und Evaluierung, welche Art von Software Architektur passt.
Ob eine 3-Schicht-Architektur oder CQRS bei einem Mini-Tool aber mit Kanonen auf Spatzen geschossen ist: das weiß man erst danach.

M
368 Beiträge seit 2006
vor 2 Jahren

solide Applikation zu entwickeln? Weiterhin hat der Verweis auf die Drei-Schichten-Architektur einen tieferen Sinn: damit können (häufige) Änderungen / Erweiterungen an der Software nur an einer (zentralen) Stelle im Code vorgenommen werden (immerhin könnten weitere DB'en ins Spiel kommen, an der Verarbeitungslogik könnten Änderungen nötig werden, andere UI's wollen benutzt werden,...)

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

Z
Zuber Themenstarter:in
4 Beiträge seit 2022
vor 2 Jahren

Hallo Abt,

das CQRS-Entwurfsmuster ist neu für mich und ich hab's auch noch nicht wirklich verstanden. Da muss ich noch etwas Zeit investieren.

Auf Deine Frage gibt es leider keine pauschale Antwort - es gibt hier einfach viel zu viele Vorgehensmodelle.
Bottom Up vs. Top Down sind da auch nicht die oberste Schicht - aber wie eine Idee oder ein Problem in eine Lösung gemünzt wird: tausende Wege, jedes Team entscheidet das für sich.

Das es nicht den einen "richtigen" Weg gibt, ist mir bewusst. Im Moment stellt sich mir aber auch nicht die Frage, welchen Lösungsweg ich gehe, sondern viel eher, welche erprobten Lösungswege gibt es eigentlich? In den meisten Programmierkursen lernt man das Coding, aber zu Software Architektur Modellen findet man deutlich weniger.

Zitat
Ich tue mich aber sehr schwer damit, ein Klassenmodell für meine Applikation auf die Beine zu stellen.
Musst Du das denn überhaupt, wird das erfordert?
Viele moderne Architekturprinzipien haben zwar Datenmodelle, aber keine "Business Modelle" (ich vermute, dass Du das mit Klassenmodelle meinst).
Moderne Architekturen wie CQRS arbeiten mit Zustandsveränderungen und Projektionen - nicht mit mächtigen, überladenen Business Modellen.

Nein, ich muss nicht. Ich dachte aber, dass ich damit das ganze für mich visualisieren kann, damit ich "den Knoten in meinem Kopf" lösen kann. Mein Ziel ist ja auch gar nicht, so schnell es geht die Aufgabe zu lösen, sondern etwas zu lernen. Ich habe halt eine Aufgabenstellung aus meinem Arbeitsalltag genommen, um meine Fähigkeiten in der Softwareentwicklung zu verbessern, anhand einer realen Aufgabe. Wenn ich am Ende auch noch meine Arbeit erleichtern kann, wunderbar.

Hallo M.L.,

die Wartbarkeit und Änderungsfähigkeit sind für mich ein essenzieller Bestandteil einer "soliden Applikation". Deswegen suche ich Wege, wie ich diese erreichen kann.

Gruß
Zuber

M
368 Beiträge seit 2006
vor 2 Jahren

das CQRS-Entwurfsmuster siehe z.B. bei thenativeweb & YT: https://www.youtube.com/watch?v=nDSwyowKYP8 und https://www.youtube.com/watch?v=r0xWHh2u--A (aber am Beispiel "Microservices" sollte man anmerken, dass man ein Architekturprinzip nicht "auf Teufel komm raus" auf jede x-beliebige Situation anwenden soll(te))
Wege, wie ich diese erreichen kann. Man identifizert im Vorab die Teile der Software, die kaum (oder selten) geändert werden und fügt diese zusammen. Teile mit höherer Änderungsrate werden ausgelagert oder abstrahiert, z.B. durch Interfaces

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

16.806 Beiträge seit 2008
vor 2 Jahren

welche erprobten Lösungswege gibt es eigentlich?

Tausende, hundert Millionen tausende. Unendlich.

In den meisten Programmierkursen lernt man das Coding, aber zu Software Architektur Modellen findet man deutlich weniger.

Ja, deswegen gibt es verschiedene Phasen in der Software Entwicklung.
Das eine ist die Software selbst, das andere die Evaluierung, Architektur und Co... Das fällt nicht vom Himmel und es gibt leider kein global fixes Schema für jede Anwendungsart.
Davon abgesehen Architektur entwickelt sich die Architektur genauso weiter wie die Software selbst.

dass ich damit das ganze für mich visualisieren kann, damit ich "den Knoten in meinem Kopf" lösen kann.

Da sind wir eigentlich auch schon beim Problem: die beste Architektur mag nicht die einfachste sein - und umgekehrt.
Software ist >80% Erfahrung, weshalb das auch ein Job ist, in dem ein Studium prinzipiell nicht wahnsinnig viel hilft im Alltag.
Es gibt nicht nur den einen Weg nach Rom - und viele Entscheidungen im IT- und Software-Bereich basiert auch auf dem Skillset des Teams, die es nachher umsetzt.

Du musst von dem Gedanken weg kommen, dass es den einen besten Weg gibt bzw. dass die Wege überhaupt zählbar sind.
Software ist immer ein Zustand von Kompromissen.

die Wartbarkeit und Änderungsfähigkeit sind für mich ein essenzieller Bestandteil einer "soliden Applikation". Deswegen suche ich Wege, wie ich diese erreichen kann.

Gleiches Thema: gibt nicht nur einen Weg.

--
Ich lehn mich jetzt mal ein bisschen aus dem Fenster, aufgrund der Frageart: Du willst eher ein Tool als eine wirkliche Anwendung oder Plattform machen, oder?
Dann spielt die Architektur meist eine untergeordnete Rolle sondern man verfolgt Prinzipien wie DRY und KISS.

Mit Kanonen auf Spatzen zu schießen ist meist aufwändiger als das Produkt selbst 😉

Z
Zuber Themenstarter:in
4 Beiträge seit 2022
vor 2 Jahren

Hi,

Ok, für mein konkretes Projekt werde ich wohl mit einem rudimentären 3-Schichten-Modell starten, da mir die Trennung dort sinnvoll für das Projekt erscheint.

Tausende, hundert Millionen tausende. Unendlich.

Du musst von dem Gedanken weg kommen, dass es den einen besten Weg gibt bzw. dass die Wege überhaupt zählbar sind.
Software ist immer ein Zustand von Kompromissen.

Das ist beides nachvollziehbar für mich. Dann würde ich meine Frage gerne umformulieren: Welche Software Architekturmodelle sollte man in meinem Umfeld auf jeden Fall einmal anschauen? Das Umfeld würde ich als "Industrielle Datenverarbeitung" verallgemeinern. Ich bin mir fast sicher, dass es für z.b. Spiele Entwicklung andere, in dem Umfeld häufiger anzutreffende Architekturen gibt.

Mir ist natürlich klar, dass man auf diese Frage auch keinesfalls eine vollständige Antwort liefern kann. Es gibt aber sicher einige Architekturen, die besonders häufig verwendet werden.

Gruß
Marcel

16.806 Beiträge seit 2008
vor 2 Jahren

Auch da muss ich Dir aus Erfahrung sagen: leider gibts auch dafür keine pauschale Antwort.
Ich bin seit >15 Jahren im industriellen Umfeld, war für Architekturen verantwortliche die einzelne Sensoren, ganze Kühlschränke, Traktoren, Industrie-Maschinen oder 2KM große Produktionsanlagen umfasst haben - die Anforderungen sind völlig verschieden.
Gerade bei Daten macht die Art und Weise sowie die Menge ein riesen Unterschied.

  • Kühschränke funken vielleicht alle 30 Minuten fixe Datenpakete
  • Industrie-Maschinen produzieren im Rohzustand locker 50 GB pro Minute Daten
  • Einzelmaschinen dürfen mal ausfallen, große Produktionsanlagen haben oft SLA von >99%

Im Endeffekt ist jede Architektur anders.

Ich kann Dir da auch nicht mehr sagen als zB Google Suche nach "most important software architecture patterns"
Ob da jeder Inhalt für jeden passt... weiß man nicht.

G
16 Beiträge seit 2019
vor 2 Jahren

Schau mal beim David rein, er hat sehr viele Videos die Architektur generell erklärt und auch spezielle Architekturen im Detail

David Tielke Youtube Kanal

Viel Spaß beim Stöbern

C
1.214 Beiträge seit 2006
vor 2 Jahren

aber zu Software Architektur Modellen findet man deutlich weniger.

Das ist nicht ganz richtig... Man findet schon durchaus einiges, auch etwas was man in vielen Bereichen wiederverwenden kann. Es ist aber auch so, dass man im Bereich Enterprise Software viel mehr findet. Das ist wohl einfach etwas, womit sich sehr viele Entwickler beschäftigen, und wo es schon ziemlich viele etablierte/dokumentierte Architekturen gibt. Die meisten anderen Bereiche sind schon viel spezieller. Wenn du z.B. ein spezialisiertes CAD System schreiben musst, ist das vermutlich ein Thema, das nicht Millionen von Entwicklern interessiert, da findet man viel weniger. Aber ein bisschen was findet man schon.
Mich haben solche Fragen vor allem im Studium auch sehr stark beschäftigt. Und die Antwort ist wohl einfach Erfahrung, möglichst viel davon. Man kann oft auch einfacher sagen, warum eine Software schlecht ist, als warum sie gut ist.
Ich bin C++ Entwickler, da findet man noch weniger vorgefertige Architekturen. Ich schau z.B. gern öfter mal Videos von der cppcon und ähnlichen Veranstaltungen (wobei ich da mittlerweile auch wenig neues entdecken kann). Da finde ich sicher nicht DIE Idee, wie ich eine bestimmte Software angehe. Aber viele kleine Ideen, wie man etwas verbessern oder eleganter lösen könnte. Und das kann sich durchaus zu einem Gesamtbild zusammensetzen.