Klassen Grundsätzliche Fragen zu geplanter Programmstruktur

nonickatall

nonickatall

Mitglied
Hallo,

ich bin neu bei Java und habe aber eine recht konkrete Vorstellung von einer umfangreichen Applikation und versuche Java nun damit direkt praktisch anzuwenden, um zu lernen.

Ich würde gerne Meinungen und alternative Ansätze einholen, bevor ich in die völlig falsche Richtung programmiere. Ich mache das Ganze "Learning bei doing" und kann mich dabei vor hangeln. Wenn ich allerdings eine total doofe Struktur überlegt habe und auf halben Wege feststelle, dass das alles so nicht sinnvoll ist, ist alles "Für die Katz" und aus Erfahrung in anderen Sprachen weiß ich: Nichts ist schlimmer, wie ein kompletter Strategiewechsel bei einer bestehenden Software. Ich würde also gerne im Vorfeld wissen, ob mein Denkansatz sinnvoll ist, oder ob es deutlich sinnvollere Wege gibt.

Hintergrund ist, dass ich ein Projekt mit ganz verschiedenen Steuerungsaufgaben auf mehreren Raspberrys gleichzeitig laufen lassen will, die örtlich verteilt in einem Netzwerk sind. Ferner möchte ich, das die Raspberrys austauschbar sind, damit ich bei Ausfall einen Gerätes schnell und problemlos Ersatz schaffen kann. Ich hätte also beispielsweise ein fertiges Gerät mit einem genormten Schnittstellenstecker liegen und muss den Raspberry nur anstöpseln und mit einem bestimmten Startparameter starten, um eine gänzlich andere Funktion zu generieren, ihn also als Gerät 1, 2 oder 6 laufen zu lassen.

Der Ansatz ist also, dass auf allen Geräte sozusagen das selbe Package installiert ist und ich eben durch eine Parameterübergabe beim Start definiere, welche Aufgaben das Gerät übernimmt.

Dazu laufen auf den Raspberrys dann unterschiedliche Module (Klassen) die eben abhängig von der jeweiligen Aufgabenstellung gestartet werden sollen.

Meine Idee ist es also, zunächst ein Modul (Hauptklasse) zu starten, das eine Verbindung zu einem SQL Server herstellt. Dort gibt es eine Tabelle "Module", wo die zu dieser Konfiguration passenden Module(Klassen) mit Startparametern und anderen Informationen gespeichert sind. Ich lese das erste Modul ein und starte es mit Parameter. Dann das zweite und so weiter. Also im Grunde ein normaler Methodenaufruf. Dazu müsste ich natürlich meinen Methodenaufruf, zum Beispiel:

Java:
SMS.start(String Parameter);

aus der Tabelle holen und ausführen. Den Vorteil den ich sehe ist, dass die Startklasse damit universell ist und ich bei neuen Modulen nur Einträge in die Tabelle machen muss, bzw. die passenden Module zu der Konfiguration durch Query auf dem SQL-Server ermitteln kann.

Die Frage ist. Geht sowas überhaupt?

Des weiteren sollen Steuerungsaufgaben als Jobs aus einer anderen Tabelle auf dem SQL Server kommen. Das heißt Akteure, zum Beispiel eine GUI, die irgendwo läuft, oder eine Klasse die E-Mails empfängt, aber auch Eingänge die auf dem Raspberry getriggert werden, sollen über entsprechende Klassen Jobs erzeugen, die in eine gemeinsame Tabelle "abgeworfen" werden und die jeweiligen zuständigen Module z.B. das GPIO Modul auf Rasperry 3 holt sich den für ihn relevanten Job und führt ihn aus.

Meine Idee ist das neben der Anfangs beschriebenen Start Klasse eine, ich nenne sie mal, Job Manager Klasse läuft, die sozusagen die Anforderung entgegennimmt, die Syntax prüft, auf Ausführbarkeit prüft, auf Rechte prüft und dann einen Job in die Tabelle auf dem SQL Server schreibt.

Die jeweilig zuständige Klasse müsste dann auf neue Einträge für sich lauschen und dann den Job ausführen. Damit wäre ich programmiertechnisch total flexibel. Wenn ich beispielsweise ein Gerät schalten möchte, das an einem Relais an einen GPIO an Raspberry 3 hängt und von der Klasse GPIO gesteuert wird, ist es dann unerheblich, ob ich das Gerät per Schalter an IO Pins, per E-Mail, per SMS, per GUI oder Sheduler starte. Die jeweilige Klasse erzeugt über den Job Manager dann einfach nur einen Job in der Job Tabelle, die von der jeweiligen Klasse dann ausgeführt wird.

Dazu die Frage:
Ist es sinnvoll in jeder Klasse permanent nach neuen Jobs auf dem SQL Server zu suchen oder gibt es auf einen MYSQL Server die Möglichkeit Events zu triggern, oder macht es Sinn eine Klasse zu haben, die nur nach neuen Aufträgen sucht und diese dann an die jeweilige Klasse per Event weitergibt?

Was sagen erfahrene Java Programmierer dazu? Ist diese Gesamt Idee nachvollziehbar, im Grunde ok, kann man das besser lösen oder ist das totaler Unfug?

Wäre sehr an Eurer Meinung interessiert.

Vielen Dank im Voraus
Ralf
 
kneitzel

kneitzel

Top Contributor
Also die eigentliche Idee ist durchaus nachvollziehbar.

Generell ist die Frage aber, ob sowas ein guter Einstieg ist. Ich fürchte, dass Du da zu viel auf einmal machen willst.

Wenn Du sowas angehen willst, dann fang klein an, d.h.: reduziere die Komplexität und lass viele Features erst einmal weg. Die kannst Du nach und nach entwickeln.

Das dann irgendwas ganz dynamisch erfolgen kann, ist ein Feature, das Du später machen kannst. Aber so lange Du nur alleine entwickelst, ist sowas nicht notwendig. Dann können da Jobs oder Tasks oder wie auch immer du dies bezeichnen möchtest, konkret vorliegen. Und dann hast Du einfach eine an entsprechenden Implementationen.

Wenn Du später das wirklich dynamisch halten willst, dann kannst Du dies als Service Provider aufziehen, d.h. jars können eingebunden werden, die sich dann selbst registrieren bzw. wo Du gezielt nach einem Service suchen kannst.

Das nur als ein Beispiel ... fang wirklich erst einmal einfach an. Versuch Dir nicht zu viel auf einmal vorzunehmen ...
 
F

fhoffmann

Top Contributor
ich bin neu bei Java
Bist du wirklich "neu bei Java" und willst ein derartiges Projekt umsetzen?
Du hast ja offensichtlich Kenntnis von Klassen und Vererbung. In dieser Welt scheinst du nicht neu zu sein. Möglicherweise hast du schon viel Erfahrung mit C++.
Wo liegt dein Problem wirklich? Ist es Java oder ist es die Planung des Programms?
 
nonickatall

nonickatall

Mitglied
Bist du wirklich "neu bei Java" und willst ein derartiges Projekt umsetzen?
Du hast ja offensichtlich Kenntnis von Klassen und Vererbung. In dieser Welt scheinst du nicht neu zu sein. Möglicherweise hast du schon viel Erfahrung mit C++.
Wo liegt dein Problem wirklich? Ist es Java oder ist es die Planung des Programms?
Ja, ich bin neu bei Java. Natürlich nicht so neu, das ich gestern von Java erfahren habe, sondern ich lese schon seit einiger Zeit ein Buch über Java. ;-) Ich habe also theoretisch einen Übeblick, aber Theorie und Praxis sind beim programmieren doch zweierlei.. ;-)

Ich habe schon einige kleine Testprogramme gemacht, aber erfahrungsgemäß bringt einen das nicht wirklich weiter.

Ich komme aus der Datenbank Welt und kenne mich mit Datenbanken gut aus, zumindest mit der Strukturierung von Daten. Und ich habe die Applikation von der ich spreche, zumindest in deutlich einfacherer Form mit Python programmiert. Allerdings nicht objektorientiert, sondern eher als Skript.

Nachdem das Ganze aber immer mehr gewachsen ist und meine Ideen immer konkreter wurden, wollte ich das ganze mit Python objektorientiert neu schreiben, habe mich dann aber dagegen entschieden und mir gesagt: Ich wechsel lieber die Programmiersprache und fange richtig an, als da jetzt auf die falsche Sprache zu setzen. Python ist super, aber doch in ein paar Dingen sehr eingeschränkt.

Mit Programmieren habe ich auch Erfahrung, ich hab viel Visual Basic unter Access gemacht. Also worum es da grundsätzlich geht, was Objekte, Variablen, Arrays, Events, GUI, Exceptions und Fehler Behandlung sind, ist mir bekannt.

Ich habe auch Zeit und muss nichts übers Knie brechen. Ich bekomme das schon hin, auch wenn ich mich da Stück für Stück reinfuchsen muss. ;-)

Der Anfang ist ja auch nicht so schwer. Ein paar Klassen. Ein SQL-Server. (Der ist auch schon eingerichtet und ich kann ich auch schon mit Java zugreifen, lesen und schreiben). Und GUI und Email und eine geplante Handy App kommt später.

Ein Raspberrys inklusive Konfiguration und elektrischer Installation läuft seit langem, inklusive des beschriebenen Steckers.

Also glaube ich nicht, dass ich mir da zu viel vornehme.

Meine große Sorge ist eben eher, dass ich das jetzt mit Java, im Wissensstand meiner oberflächlichen Beschäftigung, anfange, strukturiere und nach einiger Zeit feststelle, dass der Weg, den ich gegangen bin, völlig falsch war.

Zum Beispiel habe ich momentan das Problem, weswegen ich auch von der Python Lösung weg will, dass bestimmte Events zu lange brauchen, weil das ganze im Prinzip eine while Skript ist, das über die Jahre gewaltig gewachsen ist und inzwischen total aufgebläht und träge ist.

Da frage ich mich z.B. ob es von einer eingehenden SMS, über einen Job Manager, der einen Datensatz auf den SQL-Server schreibt und einen, ich nenne ihn mal “Watchdog“ der prüft ob auf dem SQL-Server neue Datensätze vorliegen und diese an das entsprechende Modul weiterreichen, der dann ein Relais schaltet, nicht eine zu große Latenz gibt und ich das ganze in maximal einer Sekunde abarbeiten kann.

Deswegen würde es mir sehr weiterhelfen, wenn ein erfahrener Programmierer das Konzept mal bewertet, oder mir sagt, wie man das grundsätzlich anders angehen kann. In die Details arbeite ich mich dann selber ein.

Eine konkrete Frage an der das Ganze natürlich hängt, hatte ich ja schon gestellt. Kann man eine Methode aus einer Variablen generieren? Dazu habe ich im Netz irgendwie nichts gefunden. Denn das ist ja der Kern meiner Idee. Denn die Module, die ich über die SQL Tabelle starten möchte, beziehungsweise die Jobs, die ich auf den Modulen ausführen möchte, sind ja am Ende Methoden, bzw. Methoden die Klassen starten.

Vielen Dank im Voraus für eure Mühe. Liebe Grüße Ralf
 
Zuletzt bearbeitet:
mihe7

mihe7

Top Contributor
Da frage ich mich z.B. ob es von einer eingehenden SMS, über einen Job Manager, der einen Datensatz auf den SQL-Server schreibt und einen, ich nenne ihn mal “Watchdog“ der prüft ob auf dem SQL-Server neue Datensätze vorliegen und diese an das entsprechende Modul weiterreichen, der dann Weise ein Relais schaltet, nicht eine zu große Latenz gibt und ich das ganze in maximal einer Sekunde abarbeiten kann.
Hört sich für mich nach Messaging (MQTT, JMS, o. ä.) an.

EDIT: ich habe hier einen Lichtschalter, der ist mit einem MQTT-Server auf dem Raspberry verbunden. An dem hängt ein IR-Receiver und per lirc wird ein Skript gestartet, das über einen MQTT-Client eine entsprechende Message versendet, damit das Licht an oder aus geht. Ist ein klein wenig träger als wenn Du per Webbrowser den Lichtschalter direkt betätigst aber durchaus im Bereich des Erträglichen (weit unter 1 s).
 
nonickatall

nonickatall

Mitglied
Hört sich für mich nach Messaging (MQTT, JMS, o. ä.) an.

EDIT: ich habe hier einen Lichtschalter, der ist mit einem MQTT-Server auf dem Raspberry verbunden. An dem hängt ein IR-Receiver und per lirc wird ein Skript gestartet, das über einen MQTT-Client eine entsprechende Message versendet, damit das Licht an oder aus geht. Ist ein klein wenig träger als wenn Du per Webbrowser den Lichtschalter direkt betätigst aber durchaus im Bereich des Erträglichen (weit unter 1 s).
Top . Diese Antwort bringt mich schon mal ein Stück weiter und ich werde mal nach den Begriffen googlen...👍
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Grundsätzliche Fragen zum Heap Space Allgemeine Java-Themen 12
DStrohma Grundsätzliche Fragen zum Aufbau eines komplexeren Programmes Allgemeine Java-Themen 8
D Grundsätzliche Fragen zur Grafikdarstellung in Spielen Allgemeine Java-Themen 2
W Ein paar Fragen zu .properties und .css Allgemeine Java-Themen 6
W Mal ein paar generelle Fragen zu InputStream und OutputStream Allgemeine Java-Themen 4
X Fragen zur Javamail API und Gmail Allgemeine Java-Themen 4
T Fragen bezgl. Lambdas Allgemeine Java-Themen 20
X Collections Fragen zu gleichen Elementen in TreeSet Allgemeine Java-Themen 35
A Neuerungen in Java 8 StreamAPI- Paar fragen Allgemeine Java-Themen 4
temi Fragen zur Software-Architektur Allgemeine Java-Themen 123
M Diverse Design-Fragen Allgemeine Java-Themen 6
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
M Allgemeine Fragen meinerseits Allgemeine Java-Themen 4
V Wie kann ich die Fragen mit den anderen Klassen verbinden? Allgemeine Java-Themen 1
J Fragen zu generischer doppelt verketteter Liste (bei fehlendem Grundverständnis) Allgemeine Java-Themen 1
R Es gibt keine dummen Fragen (hab ich mal gehört) Allgemeine Java-Themen 11
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
2 2 Klein Fragen Allgemeine Java-Themen 7
alderwaran .jar Code Signing, User-Keystore und Fragen dazu Allgemeine Java-Themen 0
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
A Java Theorie-Fragen Allgemeine Java-Themen 7
K Java QUIZ-Spiel Fragen und Antworten generieren?! Allgemeine Java-Themen 5
R Socket Fragen zu UDP Allgemeine Java-Themen 1
B Noob-Fragen zu Tablets und PC kompatiblität... Allgemeine Java-Themen 6
D Ein paar allgemeine Fragen zu Java Allgemeine Java-Themen 19
L Fragen für Facharbeit: Analyse von Strings in Java Allgemeine Java-Themen 4
R Fragen zu Server + UI Allgemeine Java-Themen 2
U Vier Fragen zu Java Allgemeine Java-Themen 2
H MediaManager Fragen/Probleme Allgemeine Java-Themen 6
D Fragen zum erstellen einer ausführbaren Jar Datei Allgemeine Java-Themen 3
C Polymorphie Fragen zur Annotations von Persistenz Allgemeine Java-Themen 2
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
Luk10 Fragen zum ByteBuffer (lwjgl - icons) Allgemeine Java-Themen 2
F Akkumulator Hough-Transformation offene Fragen Allgemeine Java-Themen 4
Luk10 Fragen zu Naming-Conventions Allgemeine Java-Themen 5
Z Einige Fragen Allgemeine Java-Themen 10
T OOP Einige Fragen zu UML-Klassendiagrammen Allgemeine Java-Themen 6
G Einige Fragen zu ResourceBundles Allgemeine Java-Themen 2
S Fragen zu verschiedenen Themen vom JCreator Allgemeine Java-Themen 2
Semox Grapheneditor - Allgemeine Fragen zum Logikdesign Allgemeine Java-Themen 3
O kleine Fragen eines Anfängers Allgemeine Java-Themen 2
X Executor fragen ob fertig Allgemeine Java-Themen 13
nrg Swing 2 Fragen zu Swing/AWT Allgemeine Java-Themen 7
K Reflections Fragen Allgemeine Java-Themen 7
S Fragen zum SCJD-Zertifikat Allgemeine Java-Themen 2
M Backend Entwicklung - Konzept fragen Allgemeine Java-Themen 3
E Fragen zu Scala Allgemeine Java-Themen 11
Daniel_L Fragen zu RegEx und URL umwandeln Allgemeine Java-Themen 4
J Diverse Fragen bezüglich Jasper Allgemeine Java-Themen 3
S Fragen zum ShutdownHook Allgemeine Java-Themen 7
V Fragen zu einem Java Browser Allgemeine Java-Themen 7
G Fragen zum eigenen Scheduler Allgemeine Java-Themen 4
M Drag and Drop: 3 Fragen Allgemeine Java-Themen 3
L Einige Fragen zu Java Allgemeine Java-Themen 9
F Linguistische Fragen zu Javadoc bzw. Englisch Allgemeine Java-Themen 4
E Einfache Fragen zu Dateien Allgemeine Java-Themen 7
E Thread Fragen in Verbindung mit Swing Allgemeine Java-Themen 4
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
X Einige Fragen zu Serialisierung Allgemeine Java-Themen 2
H Java Multiplicoice Test (10 Fragen) Allgemeine Java-Themen 11
J Viele Fragen. =) Hoffentlich könnt ihr helfen Allgemeine Java-Themen 9
J 2 Fragen zu JMF und eine Rechtsfrage Allgemeine Java-Themen 3
S Viele Fragen eines Umsteigers (von .NET) Allgemeine Java-Themen 6
C LinkedList Fragen Allgemeine Java-Themen 7
P Fragen zur JBuilder und den kosten. Allgemeine Java-Themen 7
reibi JVM fragen welche Apps geladen sind Allgemeine Java-Themen 7
I Fragen zum Internetseiten Einlesen/Auswerten Allgemeine Java-Themen 5
F Paket und Software Design Fragen. Allgemeine Java-Themen 5
S 2 Fragen allgemeine fragen zu final und interface Allgemeine Java-Themen 13
M ein paar fragen über JBoss und Catalina Allgemeine Java-Themen 7
D Allgemeine Fragen zum Speichern Allgemeine Java-Themen 3
F allgemeine Fragen zu Java Allgemeine Java-Themen 9
S Fragen zu 4 speziellen Listen Allgemeine Java-Themen 4
U JFrame, JOptionPane - vor dem Schließen Benutzer fragen Allgemeine Java-Themen 10
I zwei simple fragen Allgemeine Java-Themen 22
G 2 Fragen Allgemeine Java-Themen 7
G Fragen zu ausführbaren JAR Files Allgemeine Java-Themen 23
G Fragen zu JTextField bzw. JTextArea Allgemeine Java-Themen 2
J 5 Fragen. Allgemeine Java-Themen 2
P Tausend Fragen... Allgemeine Java-Themen 3

Ähnliche Java Themen


Oben