Frage

Ermöglicht einen einfachen Spring MVC-Controller übernehmen, den die ID eines Domain-Objekts empfängt. Die Steuerung sollte einen Dienst aufrufen, die etwas mit diesem Domain-Objekt tun soll.

Wo sehen Sie „convert“ die ID des Domain-Objekts in das Domain-Objekt, indem sie aus der Datenbank geladen? Dies sollte nicht durch die Steuerung erfolgen. So ist die Service-Methode Schnittstelle verwenden, um die ID akzeptieren Domain-Objekt anstelle der Domain-Objekt selbst. Aber die Schnittstelle des Dienstes wäre schöner, wenn sie das Domain-Objekt als Parameter übernimmt.

Was sind Ihre Gedanken über diesen gemeinsamen Anwendungsfall? Wie lösen Sie das?

War es hilfreich?

Lösung

Die Steuerung sollte die ID nach unten in die Service-Schicht übergeben und dann wieder alles, was benötigt wird, um den Rest der HTTP-Antwort zu machen.

So -

Map<String,Object> doGet (@RequestParam("id") int id) {
     return serviceLayer.getStuffByDomainObjectId(id);
}

Alles andere wird nur die Web-Schicht verschmutzen werden, was überhaupt nicht über Persistenz kümmern sollte. Der gesamte Zweck der Dienstschicht ist zu Domain-Objekte zu bekommen und ihnen sagen, ihre Geschäftslogik auszuführen. So soll ein Datenbankaufruf befindet sich in der Dienstschicht als solche -

public Map<String,Object> getStuffByDomainObjectId(int id) {
    DomainObject domainObject = dao.getDomainObjectById(id);
    domainObject.businessLogicMethod();
    return domainObject.map();
}

Andere Tipps

in einem Projekt von dir mir die Dienstschicht verwendet:

class ProductService {

    void removeById(long id);

}

ich denke, das hängt davon ab, wäre ob der Dienst remote oder lokal. In der Regel versuche ich IDs zu passieren, wo möglich, Remote-Dienste, sondern bevorzugen Objekte für lokale.

Die Überlegung dahinter ist, dass es den Netzwerkverkehr reduziert, indem nur das Senden was zu Remote Services unbedingt notwendig ist, und mehr Anrufe zu DAOs für lokale Dienste verhindert (wenn auch mit Hibernate dieser Zwischenspeicherung könnte einen Mute-Punkt für lokale Dienste sein).

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