Frage zu Applikationsdesign. Bitte um Unterstützung ;)

Status
Nicht offen für weitere Antworten.
G

Gizmo77

Gast
Hallo Community...

Ich habe ein Projekt auf der uni am laufen, und ihr könntet mir wirklcih viel helfen, wenn ihr mir denkanstösse geben könntet. Leider bin ich noch ziemlich "frisch" bei webservices, und daher auf hilfe angewiesen.

Zuerst mal das Projekt:
Ich bin betreiber eines Online-Reisebüros, welches Flüge, Hotels, Mietautos,... anbietet.
Ziel dieses Reisebüros ist es, verschiedenste WEbservices anzubinden, und eben deren Ressourcen anzubieten, ohne dass der User merkt, dass die Angebote von verschiedenen Anbietern kommen.
Klassisch Expedia.de oder ähnliches.

So, nun meine Frage bzw. mein Plan:

Ich hab mir das so vorgestellt, dass eine HTML Website die Anfragedaten an einen Java-"Manager" schickt, der zur Online-Reiseverwaltung gehört.
Es gibt ein Interface "IFlug", welches die Methoden vordefiniert, welche jedes Webservice anbieten muss, das sich an meine Applikation anbindet.
Also z.B. getFlightList, bookFlight,...

Für jedes Flugwebservice (Lufthansa, British Airways, Air France,...), das nun an meine Plattform angebunden wird, muss eine Class erstellt werden, welche das Interface implementiert.

Kommt nun eine Fluganfrage, müsste der Manager alle Klassen aufrufen, welche dieses Interface implementiert haben...

Erste Frage: ist dies möglich ? ist dies elegant ? gibts andere Wege wie sowas normal gemacht wird ?

So, das wäre mein Plan.

Zweite Frage: Bin ich komplett am Holzweg und die Applikation solte anders aufgebaut werden ?

Für jeden Input 100000x dankbar

Gizmo
 

Marco13

Top Contributor
Bin auch ein SOA-Experte, aber unabhängig davon klingt das ganz sinnvoll:

Im Interface IFlight werden die Methoden definiert, wie DU sie verwenden willst (getFlightList, bookFlight,...)

Für jedes Flugwebservice (Lufthansa, British Airways, Air France,...), das nun an meine Plattform angebunden wird, muss eine Class erstellt werden, welche das Interface implementiert.

Ja - die Implementierungen müssen wahrscheinlich unterschiedlich sein. Vielleicht gibt es bei einem Anbieter nichts, was direkt "getFlightList" entspricht, sondern nur zwei Methoden "getNumFlights()" und "getFlight(int index)" oder so - mit denen man das "getFlightList" aber "nachbauen" kann...

Kommt nun eine Fluganfrage, müsste der Manager alle Klassen aufrufen, welche dieses Interface implementiert haben...

Das kapier' ich jetzt nicht: Das Interface IFlight dient ja genau dem Zweck, später mit den eigentlichen Klassen nichts mehr zu tun haben zu müssen. Der Manager kennt nurnoch einen Haufen "IFlight"s. Das sind dann "BritishAirwaysFlight", "LufthansaFlight" usw. aber das sieht der Manager nicht. Er ruft nur die Methoden auf, die er durch IFlight kennt.
 
G

Gizmo77

Gast
Nun, irgendwoher muss der Manager ja wissen, in welchen Klassen er die Methoden aufrufen muss...

D.h. meinem Verständnis nach muss ich mal vor dem Absenden der Abfrage des Managers an die verschiedenen Webservices mal rausfinden, welche Webservices überhaupt angebunden sind, welche davon Flugwebservices sind, und dann kann ich in jeder der Klassen die entsprechende Methode aufrufen...

Oder bin ich am Holzweg ?
 

Marco13

Top Contributor
Ja, einmal müssen die Instanzen natürlich erstellt werden. Aber spätestens im Manager (sofern wir die gleiche Vorstellung von dieser Klasse haben) sieht man davon dann nichts mehr. Ganz grob
Code:
class Manager
{
    // Kennt nur IFlight
    private List<IFlight> flights = ...

    // Hantiert auch nur mit IFlights rum
    public void requestFlight(String from, String to)
    {
        for (IFlight flight : flights)
        {
            List<Bla> bla = flight.getFlightList();
            if (containsFlight(bla, from,to)) return it;
        }
    }

    // Kriegt auch nur IFlights übergeben
    public void addFlight(IFlight flight)
    {
        flights.add(flight);
    }
}


Aber von AUSSEN muss natürlich irgendwann mal sowas gemacht werden wie
Code:
manager.addFlight(new SpecificImplementationOfIFlightInterfaceThatPassesAllRequestsToAirBerlin());
manager.addFlight(new SpecificImplementationOfIFlightInterfaceThatPassesAllRequestsToLufthansa());
manager.addFlight(...);

Wo und wie festgelegt wird, welche Implementierungen dort übergeben werden ... (ist vielleicht eine Frage, die zu SOA-spezifisch ist, als dass ich sie beantworten könnte) ... das muss man dann irgendwie wissen oder rausfinden - das hängt wohl davon ab, wie das angesprochene "Anbinden eines Flugwebservices an deine Plattform" abläuft - also, irgendwo musst du ja auch definieren, welche dieser Services angesprochen werden, wie sie auf das Interface abgebildet werden .. vielleicht auch irgendwie mit diesen WSDL-Dateien rumhantieren und so ???:L (Sorry, da kenn ich mich auch nicht so gut aus - aber in bezug auf das, was ich ursprünglich für die eigentliche Frage hielt: Das Konzept, die verschieden zu implementierenden Services hinter einem gemeinsamen Interface zu verstecken ist auf jeden Fall sinnvoll, sofern man so ein Interface vernünftig definieren kann (d.h. sofern man JEDEN Flugwebservice über dieses Interface ansprechen kann)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben