StormCraftable
Grünschnabel
Halli Hallo!
Meine Frage ist sehr speziell und ich weiß nicht, ob ich hier richtig bin, aber ich beschreibe mal, was ich versuche zu erreichen.
Ich möchte etwas ähnliches wie Spring umsetzen, das schon mal vor weg. Nur soll dieses wesentlich mehr an Dependencie Injection für "Modulare Programmierung" orientiert sein. Dazu folgende Idee:
Ich möchte eine "DataOutputPipe" haben, die eine statische, innere "HashMap" beinhaltet, in welcher sich (Key : Value) [String (Der Name) : Das_Object] befindet. Des weiteren soll man Objekte hinzufügen, sowie bekommen können, also 2 Methoden die im Prinzip "addData(Das_Object object)" und "getData(String key)" heißen.
Mein Problem liegt dabei in der Methode getData(). Welche Objekte man der "DataOutputPipe" gibt soll nicht vor-definiert sein. Das heißt, füge ich bei einem mal die Klasse A der DataOutputPipe hinzu, soll man diese bekommen und nutzen können, fügt man beim nächsten mal die Klasse B der DataOutputPipe hinzu, soll man auch dieses bekommen und nutzen können. Diesen dynamischen Rückgabe wert konnte ich bis heute nicht erfolgreich umsetzen. Das mag daran liegen, dass ich Jahrelang in php entwickelt habe und jetzt ein bisschen über die Typsicherheit von Java stolpere.. auch wenn das eigentlich besser ist.
Vorteile davon wären:
- Objekte müssen nicht instantiiert werden. Man bekommt von der DataOutputPipe (ähnlich wie bei einem Factory-Patern) fertige Objekte.
- Man bekommt (wenn man will) immer die gleichen Objekte, wie bei einem Singlton-Patern.
- Unabhängig von der Instantiierung der DataOutputPipe kann jedes beliebige Objekt die gleiche Instanz eines beliebigen Objektes bekommen.
Das Problem, auf welches ich bisher gestoßen bin, ist, dass ich sehr eingeschränkt bin, wenn ich abstract classes, bzw interfaces für die einzelnen Daten nutze. Das würde heißen, dass jede Klasse in der DataOutputPipe nur eine bestimmte Menge an Methoden haben könnte. Das soll so nicht sein.
Meine Motivation ist, dass ich diese DataOutputPipe in ein, vor längerer Zeit von mir geschriebenem RegisterHandler-Framework einpflegen möchte. Dieses RegisterHandler-Framework sorgt für Kommunikation zwischen Objekten, ohne Objekte und / oder primitive Datentypen übergeben muss.
Ferner wäre es unglaublich cool, wenn man der DataOutputPipe sagen werden soll, "füge automatisch alle Klassen mit der custom Annotation @bla hinzu", nur dazu kenne ich mich noch nicht gut genug mit custom Annotations aus (sowas bekommt man im Studium nicht erklärt )
Meine konkrete Frage: Ist so etwas möglich? Und wen ja, wie würde man so etwas am besten umsetzen.
Hier etwas Pseudocode, wie ich es mir vorstelle:
Überall wo DataComponent steht, habe ich keine Ahnung, was da hin muss, bzw. wie es anders aufgebaut besser wäre.
Die DataOutputPipe
Und hier die DataContainerList, welche später die Daten beinhalten soll.
Ich entschuldige mich für den langen Post und hoffe ich habe etwas Struktur beibehalten, Ich bin noch nicht so perdu mit dem Forum! Sollten euch Rechtschreibfehler, oder Formatierungs-Fehler auffallen, tut es mir leid.
Vielen Dank schon mal im Voraus für eure Zeit!
Meine Frage ist sehr speziell und ich weiß nicht, ob ich hier richtig bin, aber ich beschreibe mal, was ich versuche zu erreichen.
Ich möchte etwas ähnliches wie Spring umsetzen, das schon mal vor weg. Nur soll dieses wesentlich mehr an Dependencie Injection für "Modulare Programmierung" orientiert sein. Dazu folgende Idee:
Ich möchte eine "DataOutputPipe" haben, die eine statische, innere "HashMap" beinhaltet, in welcher sich (Key : Value) [String (Der Name) : Das_Object] befindet. Des weiteren soll man Objekte hinzufügen, sowie bekommen können, also 2 Methoden die im Prinzip "addData(Das_Object object)" und "getData(String key)" heißen.
Mein Problem liegt dabei in der Methode getData(). Welche Objekte man der "DataOutputPipe" gibt soll nicht vor-definiert sein. Das heißt, füge ich bei einem mal die Klasse A der DataOutputPipe hinzu, soll man diese bekommen und nutzen können, fügt man beim nächsten mal die Klasse B der DataOutputPipe hinzu, soll man auch dieses bekommen und nutzen können. Diesen dynamischen Rückgabe wert konnte ich bis heute nicht erfolgreich umsetzen. Das mag daran liegen, dass ich Jahrelang in php entwickelt habe und jetzt ein bisschen über die Typsicherheit von Java stolpere.. auch wenn das eigentlich besser ist.
Vorteile davon wären:
- Objekte müssen nicht instantiiert werden. Man bekommt von der DataOutputPipe (ähnlich wie bei einem Factory-Patern) fertige Objekte.
- Man bekommt (wenn man will) immer die gleichen Objekte, wie bei einem Singlton-Patern.
- Unabhängig von der Instantiierung der DataOutputPipe kann jedes beliebige Objekt die gleiche Instanz eines beliebigen Objektes bekommen.
Das Problem, auf welches ich bisher gestoßen bin, ist, dass ich sehr eingeschränkt bin, wenn ich abstract classes, bzw interfaces für die einzelnen Daten nutze. Das würde heißen, dass jede Klasse in der DataOutputPipe nur eine bestimmte Menge an Methoden haben könnte. Das soll so nicht sein.
Meine Motivation ist, dass ich diese DataOutputPipe in ein, vor längerer Zeit von mir geschriebenem RegisterHandler-Framework einpflegen möchte. Dieses RegisterHandler-Framework sorgt für Kommunikation zwischen Objekten, ohne Objekte und / oder primitive Datentypen übergeben muss.
Ferner wäre es unglaublich cool, wenn man der DataOutputPipe sagen werden soll, "füge automatisch alle Klassen mit der custom Annotation @bla hinzu", nur dazu kenne ich mich noch nicht gut genug mit custom Annotations aus (sowas bekommt man im Studium nicht erklärt )
Meine konkrete Frage: Ist so etwas möglich? Und wen ja, wie würde man so etwas am besten umsetzen.
Hier etwas Pseudocode, wie ich es mir vorstelle:
Überall wo DataComponent steht, habe ich keine Ahnung, was da hin muss, bzw. wie es anders aufgebaut besser wäre.
Die DataOutputPipe
Java:
package pipe;
public class DataOutputPipe {
private static DataContainerList<DataComponent> dataComponentContainer; public DataOutputPipe() {
DataOutputPipe.dataComponentContainer = new DataContainerList<>();
}
public DataOutputPipe(DataContainerList<DataComponent> dataComponentContainer) {
}
public static DataComponent getData(String name) {
return DataOutputPipe.dataComponentContainer.get(name);
}
public static void addData(DataComponent component) {
DataOutputPipe.dataComponentContainer.add(component.getDataName(), component);
}
}
Und hier die DataContainerList, welche später die Daten beinhalten soll.
Java:
package pipe;
import java.util.HashMap;
import java.util.Iterator;
/**
* Eine DataContainerList wird genutzt um DataComponent's zu speichern
* @param <DataComponent>
*/
class DataContainerList<DataComponent> {
private static HashMap<String, DataComponent> dataComponentList;DataContainerList() {
createDataComponentList();
}
public void add(String assertetName, DataComponent component) {
dataComponentList.put(assertetName,component);}
public void add(DataComponent component)
dataComponentList.put(component.getDataName(),component);
}
public DataComponent get(String objectName) {
return dataComponentList.get(objectName);
}
private void createDataComponentList() {
if(dataComponentList == null) {
dataComponentList = new HashMap<>();
}
}
private boolean testForDuplicate(Object component) {
Iterator dataComponentListIterator = dataComponentList.entrySet().iterator();
while (dataComponentListIterator.hasNext()) {
if(dataComponentListIterator.next().equals(component)) {
return true;
}
}
return false;
}
}
Ich entschuldige mich für den langen Post und hoffe ich habe etwas Struktur beibehalten, Ich bin noch nicht so perdu mit dem Forum! Sollten euch Rechtschreibfehler, oder Formatierungs-Fehler auffallen, tut es mir leid.
Vielen Dank schon mal im Voraus für eure Zeit!
Zuletzt bearbeitet: