2013-03-14 3 views
5

Ich möchte Daten in meiner Spring MVC Webanwendung zwischenspeichern. Da ich neu in der Spring Framework- und MVC-Architektur bin, möchte ich fragen, ob ich Daten (über Spring Caching system) auf der DAO-Ebene zwischenspeichern sollte oder ob ich die Ausgabemethoden auf einer Service-Schicht zwischenspeichern sollte.Soll ich in der Spring MVC Web App auf der DAO-Ebene oder der Service-Ebene zwischenspeichern?

z. Ich habe diese Methode auf einer Service-Schicht:

@Override 
public LinkedList<OrderCount> getOrderCount(Date dateFrom, Date dateTo, Class type) { 
    try { 
     return chartDataDAO.getOrderCount(dateFrom, dateTo, type); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
} 

und diese Methode nennt die DAO-Methode:

public LinkedList<OrderCount> getOrderCount(Date dateFrom, Date dateTo, Class type); 

Meine Frage ist: soll ich tun, Caching auf Service oder DAO-Schicht?

+0

Da dies eher eine Best-Practice-Frage ist, würde ich vorschlagen, sie auf codereview.stackexchange.com oder programmers.stackexchange.com zu veröffentlichen - beide sind bessere Orte für eine offenere Diskussion von was stellt "richtig geformten" Code und Architektur dar. :) Froh, dass du hier eine Antwort bekommen hast! –

Antwort

6

Erstens, komm nicht voran. Stellen Sie vor dem Caching sicher, dass Sie es benötigen. Caching kann die Leistung verbessern, bringt jedoch eine ganze Reihe von Kopfschmerzen mit sich (hauptsächlich aufgrund des Verlusts der Datenkohärenz).

Zweitens, wenn Sie Cache tun, wenn möglich Frameworks Verwendung Dritter wie EHCache und dergleichen (ja, dass die Datenschicht)

Drittens in Ihrem Beispiel Ihre Methodensignatur läßt mich denken, dass es unwahrscheinlich ist wird oft dieselbe Anfrage erhalten. Speichern Sie die Antwort auf getOrderCount(January 27, January 28, String) wird Ihnen nicht helfen, wenn Sie die Anfrage für getOrderCount(March 21, March 28, Vector) erhalten. Wenn es keinen Wert gibt, der für Ihre Geschäftslogik wahrscheinlich viel verlangt wird, und die Berechnung des Ergebnisses schwer genug ist, sollte das Zwischenspeichern (falls vorhanden) in die Datenschicht gehen.

3

Ich denke, Caching passt in die Service-Schicht, wenn Sie eine mehr Kontext bewusst Caching tun. Zum Beispiel Unterstützung für das optimistische Sperren eines Abfrageergebnisses, das von einem Webdienst API oder vielleicht Etag-Unterstützung ausgelagert werden kann. Dies setzt einen direkten Caching-Ansatz (nicht deklarativ) voraus, wie etwa die direkte Verwendung von EhCache.

Wenn Sie das deklarative Spring-Caching verwenden, um eine umfassende Leistungsverbesserung zu erzielen, ist es möglicherweise hilfreich, Methoden in der DAO-Ebene zwischenzuspeichern. Ich bin mir nicht sicher, ob dies einen Vorteil gegenüber Caching bietet, der bereits mit Ihrem ORM implementiert wurde - Hibernate unterstützt zum Beispiel eine Vielzahl von Cache-Ebenen, um die Leistung der Datenbank zu verbessern.

Verwandte Themen