Frage

Dies ist das Frühling Roo 1.1 Möglichkeit, eine Fabrik zu machen, die eine GWT -Aktivität zurückgibt (ja, Frühlingsgerüst)

 public Activity getActivity(ProxyPlace place) {
    switch (place.getOperation()) {
      case DETAILS:
        return new EmployeeDetailsActivity((EntityProxyId<EmployeeProxy>)place.getProxyId(), requests, 
          placeController, ScaffoldApp.isMobile() ? EmployeeMobileDetailsView.instance() : EmployeeDetailsView.instance());

      case EDIT:
        return makeEditActivity(place);

      case CREATE:
        return makeCreateActivity();
    }

    throw new IllegalArgumentException("Unknown operation "
        + place.getOperation());
  }

Es scheint mir, dass wir gerade hundert Jahre zurückgegangen sind, wenn wir einen Switch -Fall mit Konstanten verwenden, um eine Fabrik zu machen. Nun ist dies offiziell erzeugtes Frühlingsroo 1.1 mit GWT / GAE -Integration, ich melde dich nicht

Ich kann nur annehmen, dass dies einige Führungskräfte sind leere Ankündigungen, da dies definitiv nicht Frühling ist

Es scheint, dass VMware und Google zu schnell waren, um etwas herauszuholen, und es nicht ganz beendet, nicht wahr?

Vermisse ich etwas oder das ist halb gebacken und mit weitem nicht so, wie Frühling + GWT -MVP funktionieren sollte?

Haben Sie ein besseres Beispiel dafür, wie Frühling, GWT (2,1 MVP -Ansatz) und GAE eine Verbindung herstellen sollten? Ich würde es hassen, all die Klempner zu tun, um Geschichte und Aktivitäten wie diese zu verwalten. (Keine Anmerkungen? IOC?)

Ich würde es auch hassen, das Rad neu zu erfinden und meine eigene Frühlingsverbesserung zu schreiben, nur um zu finden

War es hilfreich?

Lösung

Ich benutze Roo nicht viel, also kann ich nur raten. Der von Ihnen zitierte Code sieht im Grunde genommen wie der entsprechende Teil der Beispiel -App aus der "GWT MVP -Entwicklung mit Aktivitäten und Orten" Dokumentationsseite (Hinweis: Ich habe die Kommentare nicht eingefügt, sie sind aus dem Beispielcode):

public class AppActivityMapper implements ActivityMapper {
...

 /**
  * Map each Place to its corresponding Activity. This would be a great use
  * for GIN.
  */
 @Override
 public Activity getActivity(Place place) {
    // This is begging for GIN
    if (place instanceof HelloPlace)
        return new HelloActivity((HelloPlace) place, clientFactory);
    else if (place instanceof GoodbyePlace)
        return new GoodbyeActivity((GoodbyePlace) place, clientFactory);

    return null;
 }
}

Es spielt keine Rolle, wenn "Switch + getOperation ()" verwendet wird oder "if + Instanceof". Das Problem ist, dass die Aktivität mit a gebaut wird new Operator. Das steht im Widerspruch zu den Grundlagen der Abhängigkeitsinjektion.

Das Grunde mit DI ist also, Fabriken in den ActivityMapper zu injizieren, einen für jede Art von Ort:

 public Activity getActivity(Place place) {
    if (place instanceof HelloPlace)
        return helloActivityFactory.build((HelloPlace) place);
    else if (place instanceof GoodbyePlace)
        return goodbyeActivityFactory.build((GoodbyePlace) place);

    return null;
 }

Dies hat immer noch das Schaltmerkmal. Das ist, weil etwas Muss zwischen Orten und Aktivitäten zu kartieren (die einzige Alternative wäre, eine Aktivitätsfabrik in jeden Ort einzubringen). Sie können das Mapping so konfigurierbar machen:

 Map<String, ActivityFactory> activityMap; /* injected */

 public Activity getActivity(Place place) {
    ActivityFactory factory = activityMap.get(place.getOperation());
    if (factory != null)
        return factory.build(place);

    return null;
 }

... Wenn es möglich ist, eine generische Aktivitätsfaktor -Schnittstelle zu definieren, die mit gemeinsamen Parametern funktioniert (zB in meinem Entwurf, build() würde das nur benutzen place als Argument).

Hier ist meine Vermutung (nur eine Vermutung!), Warum so etwas nicht im von Roo generierten Code ist: die "GWT MVP -Entwicklung mit Aktivitäten und Orten" Artikel ist eine Follow-up zu "Großanwendungsanwendungsentwicklung und MVP", das MVP ohne DI präsentierte und versprach, eine Zukunft zu liefern, "mit Gin zu verwenden, um den Code zu reduzieren und das Testen zu erleichtern". Es ist immer noch nicht da und der Beispielcode wurde nicht aktualisiert, um die Abhängigkeitsinjektion zu integrieren. Ich nehme an, dass der Code für Roo generierte Code in gewissem Maße auf diesem Artikel basiert, da es sich um die Referenz zu diesem Thema handelt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top