Abstractes/Schnittstellen für Objekte

sTaX

Mitglied
Hi,

ich habe im "Hintergrund" ein System, welches Daten entgegen nimmt und diese intern verarbeitet.

Diese Daten können u.a. per HTTP-Request reinkommen. Aber auch andere Wege sollen möglich sein.

Ich habe natürlich auch ein paar Klassen mit Eigenschaften usw. Diese Eigenschaften möchte ich nun immer auf den richtigen Weg aufbereiten und das das Hintergrundsystem schicken. z.B. per HTTP-Request.

Allerdings weiß ich nicht, wie ich dies elegant designen kann. Ich habe mir gedacht, dass z.B. eine Connector-interface mit einer "create()" Methode erstellen kann und davon dann Unterklassen "HTTPConnector" usw.

Meine eigentlichen Klassen mit den Eigenschaften sollten dann z.B. HTTPConnector impementieren.
Dann müsste ich natürlich die create()-Methode auf den "HTTP-Fall" anpassen.

Was ist aber nun wenn ich von HTTP auf einen CAN-Bus wechseln möchte? Dann muss ich alle create()-Methoden löschen bzw neu erstellen. "Schnell mal hin und her" wechseln klappt dann nicht. Ich müsste dann immer einen Teil vom Code auskommentiert haben?!

Ein anderer Weg, der mir einfällt wäre das ich in den HTTPConnector eine Methode ala "create(MeineKlasse mk)" schreibe und das halt mehrmals und für jede einzelne Klasse dann einen angepassten Methodenrumpf.

Dies kommt mir aber nicht sonderlich elegeant vor, da die Klassen-Logik dann teilweise im HTTPConnector landet..

Ich hoffe Ihr konntet verstehen was ich meinte...


Sehr allgemein ausgedrückt:
Ich will Objekt A,B,C (jeweils unterschiedliche Klassen) über verschiedene Schnittestellen (HTTP,CAN,..) speichern.
 
S

SlaterB

Gast
ich verstehe es nicht wirklich, besondern nicht den Teil mit Methoden löschen/ anpassen/ Code auskommentieren,
Interface und Co gibt es doch gerade um komfortabel Objekte auszutauschen statt etwa if/else im Code oder schlimmeres,

wenn eine andere Implementation einer Methode benötigt wird, dann genau das Objekt wechseln, nicht irgendwas im Code,
wenn der Wechsel mitten in einer Methode stattfindet, dann läuft was falsch, dann muss der Ablauf in mehr Untermethoden aufgeteilt werden,

im Extremfall die aktuelle Methode per Exception oder return abgebrochen werden
+ eine obere Instanz sorgt dafür dass es in einem anderen jetzt besser geeigneten Objekt (desselben Interfaces) weitergeht
 

sTaX

Mitglied
Okay, dann versuche ich es nochmal einfacher zu beschreiben:
Java:
public class EineDatenKlasse {
private String a;
private String b;
...
}

public class EineWeitereDatenKlasse {
private c;
private a;
...
}

public class HTTPConnector {
    public create(EineDatenKlasse o) {
        String requestString = "?test="+o.getA()+"&test2="+o.getB();
    }
    public create(EineWeitereDatenKlasse o) {
        String requestString = "?arg1="+o.getC()+"&arg2="+o.getA();
    }
}

Dies wäre jetzt ein Ansatz von mir. Allerdings finde ich den nicht sonderlich schön... Gibts da bessere Beispiele?
 

Marco13

Top Contributor
Theoretisch könnte man da wohl was mit Reflection machen, aber ... das sollte man nicht so unreflektiert empfehlen. Alle Methoden für alles Klassen in einer "HTTPConnector"-Klasse unterzubringen ist in der Tat unschön und schlecht erweiterbar. Aber ganz pragmatisch:
- Der request-String hängt von der Klasse ab
- Der request-String (bzw. ob überhaupt ein Request-String verwendet wird) hängt davon ab, ob es ein HTTPConnector ist.
Das sind zwei "orthogonale" Aspekte. Man wird also (ohne Reflection & Co) kaum drumrumkommen, für jede Kombination aus "Connector" und "Klasse" eine Methode zu schreiben. Flexibler wäre es aber vermutlich, wenn man diese Methoden in einzelne Klassen packen würde.
Mit ist noch nicht klar, WAS mit dem "requestString" dann WO genau gemacht wird, und wie ein anderer Connector aussehen würde. Deswegen ist es schwer, da konkreter zu werden.
 
S

SlaterB

Gast
ich sehe da keinen Bezug/ kein Problem hinsichtlich Schnittstellen,

geht es dir jetzt um den vielen Request-Parameter-Code für möglicherweise beliebig viele Klassen?
das wäre eine andere Art Problem,
dagegen helfen vielleicht Reflection-Ansätze um alle über alle Attribute zu iterieren, oder direkter selber gebaut:
in der Klasse keine normalen Parameter verwenden sondern eine Liste/ Map der Attribute mit Namen + vielleicht Zusatzinformationen wie den Namen des RequestParameters,
diese letzte Info hat vielleicht in der Klasse an sich nichts zu sagen, könnte dann an anderer Stelle konzentriert abgelegt werden,
aber ohne dass die Info irgendwo einzeln vorhanden ist gehts nun mal kaum
 

sTaX

Mitglied
Dieser HTTP-Request-String wird dann an einen Webserver geschickt (nur bei HTTP).

Wenn es eine USART-Schnittstelle geben würde, dann werden die Daten seriell über einen COM-Port rausgeschickt.

Ich weiß jetzt auch nicht, wie man diese Schnittstelle verallgemeinern könnte...

z.B. in dem man sagt die normalen Klassen müssen alle das Interface "IHTTPConnector" implementieren.

Wenn ich dann von HTTP auf z.B. USART wechsle, muss ich ja den Methoden löschen/auskommentieren und die neue Logik hineinschreiben. Ziemlich unschön?!


Im Endeffekt will ich den Klassen "EineDatenKlasse" und "EineWeitereDatenKlasse" von außen über einen Methodenaufruf (immer der gleiche) sagen "Speichere dich". Wie er dann gespeichert wird (HTTP, USART, CAN,...) soll dann entschieden werden...
 

Marco13

Top Contributor
ALLE Klassen irgendwelche Interfaces wie "IHTTPConnectable" oder so implementieren zu lassen wäre in der Tat unsinnig. Im Moment steht in dem HTTPConnector ja nur, wie die Strings gebaut werden. Ohne die Details in aller Tiefe verstanden zu haben, könnte ein GANZ GROB skizzierter Ansatz vielleicht sowas sein wie
Java:
class HTTPConnector implements Connector
{
    private Map<Class<?>, HTTPEncoder> encoders ...

    @Override // von Connector
    public void sendObject(Object object)
    {
        HHTPEncoder encoder = encoders.get(object.getClass());
        String s = encoder.createString(object);
        send(s);
    }
}

class MeineKlasseEncoder implements HTTPEncoder
{
    String createString(Object object) { .... }
}

// Registrieren des Encoders:
httpConnector.register(MeineKlasse.class, new MeineKlasseEncoder());

Wirklich NUR GANZ GROB...
 

Ariol

Top Contributor
Wie wäre denn sowas?
Java:
 public void create(Object o) {
        String requestString = getRequestString(o);
        //....
    }

    public String getRequestString(Object o)
    {
    	if(o instanceof EineDatenKlasse)
    		return "?test="+((EineDatenKlasse)o.getA())+"&test2="+((EineDatenKlasse)o.getB());

    	if(o instanceof EineWeitereDatenKlasse)
    		return "?test="+((EineWeitereDatenKlasse)o.getC())+"&test2="+((EineWeitereDatenKlasse)o.getA());
    	
    	return "";    	
    }

Nicht wirklich viel Unterschied, ...
 

Marco13

Top Contributor
Man sollte IMHO instanceof vermeiden, bzw. IMMER, wenn man es verwendet, überlegen, ob das nicht ein Fall für Polymorphie wäre. Das Problem ist, dass jede Stelle, wo es verwendet wird, erneut angefasst werden muss, wenn es eine weitere Implementierung davon gibt...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Tobse Begrifflichkeit: Software mit physikalischen Schnittstellen Softwareentwicklung 16
B Frage zu Schnittstellen (lose Kopplung) Softwareentwicklung 5
M Plugins entwickeln für ein CMS welches unter der GPL V3 steht Softwareentwicklung 1
I Datenbankschema für Versionierung der Tabellen Softwareentwicklung 9
R Datenstruktur für einen rätselhaften Namen Softwareentwicklung 10
Rahim Post Conditions für InsertAt und remove Softwareentwicklung 1
P Thema für meine Projektarbeit die etwas mit Webautomatisierung zu tuen haben soll? Softwareentwicklung 1
H Entwurfsmuster für den Client der Rest API Softwareentwicklung 0
D Welche Technologien für App und web? Softwareentwicklung 3
Thallius oAuth2 und ClientCredentials für API sinnvoll? Softwareentwicklung 3
S Welche Programmiersprache für eine 3D-Software? Softwareentwicklung 6
N Technologie Grundlagen für eine "App" Softwareentwicklung 12
OnDemand Welches Tool für Planung Softwareentwicklung 2
B Sprache für 3D Physics Engine? Softwareentwicklung 3
K Maßnahmen für Softwarequalität Softwareentwicklung 2
N Graphenalgorithmen: Best Practice für Knoten-/Kanten-Attribute Softwareentwicklung 5
Z Analysemuster - Welches nehme ich für diese Problem? Softwareentwicklung 0
L Softwareentwicklung für Embedded Systems Softwareentwicklung 1
T Gibt es eine Software die Texte für Skype automartisch (automassage) sendet ? Softwareentwicklung 4
R Online-Plattform für Essensbestellungen mit der momentanen Bestellverfolgung Softwareentwicklung 1
S Suche: (Versionierungs)Tool für Klassenaustausch mit Kollegen, die auch an dem Projekt arbeiten Softwareentwicklung 5
R UML-Diagramm für mehrere JFrames Softwareentwicklung 0
S Algorithmus für perfekte Kombination Softwareentwicklung 2
U Individualsoftware - eine Gefahr für Kunden oder die günstigere Alternative? Softwareentwicklung 7
J Grafiken für eigene Apps ? Softwareentwicklung 2
V [Klassendesgin] Verhalten von Subklassen für Aufgabenteilung benutzen. Softwareentwicklung 2
KranzKrone Architektur für einfaches Gui Programm Softwareentwicklung 6
R freie Engine für IOS, Android, Blackberry Softwareentwicklung 11
T SMART für USB Sticks? Softwareentwicklung 9
BinaryLogic Software für Projektplanung und -Entwicklung Softwareentwicklung 19
A MVC & getter für GUI Komponenten Softwareentwicklung 5
fastjack Welches Tool für Agile Softwareentwicklung? Softwareentwicklung 6
C Wiki für ein Uni - High Level Design Softwareentwicklung 5
S Design Pattern für zwei abhängige Klassen Softwareentwicklung 8
Mike90 Lizenz für eigene software Softwareentwicklung 9
V Welche Programmisprache für den Desktop? Softwareentwicklung 17
V Zeitplanung für JUnit-Tests? Softwareentwicklung 9
Jay_030 Checkstyle: Lösungsvorschläge für Design for Extension Softwareentwicklung 7
B Allgemeine Fragen für eigenes Projekt Softwareentwicklung 4
P Sensibilität für Codequalität fördern Softwareentwicklung 17
B Empfehlung für Datenbankschulung? Softwareentwicklung 2
D Beispiele für Patterns Softwareentwicklung 3
K Aufwandsabschätzung für User Stories Softwareentwicklung 8
Torres SDK für automatische Bildkorrektur Softwareentwicklung 3
martin82 Tool für IT-Requests Softwareentwicklung 5
Z Welche Software für Web Anwendungen/Spiel Softwareentwicklung 3
Quaxli Suche Tutorial für Jasper Report - speziell iReport Softwareentwicklung 8
Outsourcer Webservertechnologie für Objekterkennung Softwareentwicklung 7
Landei SSH für VMware GSX mit Windows? Softwareentwicklung 2
ARadauer jetzt wirds zeit für Delphi Softwareentwicklung 6
X JavaScript Plugin für Eclipse Softwareentwicklung 3
sparrow Welche Lizenz für ein offenes Programm Softwareentwicklung 2
ARadauer Code Konvention für Datenbanken Softwareentwicklung 5
G Suche Programm für Masken Design für Pflichtenheft Softwareentwicklung 5
S Wie weiter gehen und tutorial für MVC Softwareentwicklung 20
G Pattern für Datenbank Anwendung Softwareentwicklung 22
m@nu Anti-Spam-System für Blog bauen Softwareentwicklung 3
B Was ist besser für Grafiken? Java oder C#? Softwareentwicklung 9
N Brauche Hilfe für Onlineshop Aufgabe für OOP Grundlagen Softwareentwicklung 4
N Für und Wieder von Java und .NET (primär C#) | Performance Softwareentwicklung 6
G 1 Benutzeroberfläche für 3 einzelne Programme! Softwareentwicklung 9
D Programme für UML Softwareentwicklung 3
A Was ist die richtige Lizenz für mich? Softwareentwicklung 2
R Tool für Anforderungsermittlung, Bugtracking und Test Softwareentwicklung 4
V Antwort bewerten (Nur etwas für Experten!) Softwareentwicklung 15
D cheat für ein spiel fixen Softwareentwicklung 19
F IDE für VB Softwareentwicklung 4
K Design Pattern für einen simple Rechenmaschine Softwareentwicklung 18
S Beispiel für MVC gesucht Softwareentwicklung 53
F Kleines Programm für Windows Softwareentwicklung 2
K Buch oder Online-Tutorium für Programmentwicklung (Anfänge) Softwareentwicklung 5
G Bitte Hilfe für mySQL in einem Query Softwareentwicklung 7
J Beispiel für Besuchermuster Softwareentwicklung 6
M Übersetzer für Programmhilfe gesucht Softwareentwicklung 2
M Disclaimer für eigene Programme? Softwareentwicklung 3
U Geeignete Plattform für Projekt (JSP, PHP, Java-Anwendung) Softwareentwicklung 7
S Open Source Software für UML Softwareentwicklung 8
R Ein Thread für eine Methode Softwareentwicklung 2
S Hilfe für anfänger Softwareentwicklung 7
I regualar expression für Konstruktoren Softwareentwicklung 4
T Brauche für meinen Java-Code dringend Hilfe Softwareentwicklung 4
B Wo bekommt man fertige Java-Programme (z.B. für Lsg LGS) Softwareentwicklung 3

Ähnliche Java Themen

Neue Themen


Oben