Repository-Muster - Caching
Ich bin mir nicht sicher, wo sollte ich implementieren der Zwischenspeicherung in meine repository-pattern.
Sollte ich implementieren Sie in der service-Logik oder in das repository?
GUI -> BusinessLogic (Dienstleistungen) -> DataAccess (Repositories)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich es handhaben würde in das repository/data access layer. Die Argumentation ist, weil es nicht bis zu den business-Schicht auf, wo Sie die Daten aus, das ist die Aufgabe des repository. Das repository wird dann entscheiden, wo man die Daten aus dem cache (wenn es nicht zu alt ist) oder von der live-Datenquelle auf der Grundlage der Umstände des Daten Zugriffs Logik.
Es ist eine data-access-Anliegen mehr als eine business-Logik-Problem.
Es ist eine gute Idee, nicht um die Logik direkt in Ihrem repository haben, als die gegen das Single Responsibility Prinzip (SRP) und Separation of Concerns. SRP im wesentlichen besagt, dass Ihre Klassen nur einen Grund, das zu ändern. Wenn Sie verschmelzen die Anliegen der data access-und caching-Richtlinie in der gleichen Klasse dann ein, wenn diese Bedürfnisse ändern, müssen Sie die touch der Klasse. Sie werden auch wahrscheinlich feststellen, dass Sie gegen das DRY-Prinzip, da es leicht caching-Logik verteilt viele verschiedene repository-Methoden, und wenn es sich ändern muss, Sie am Ende mit zu viele Methoden.
Der bessere Ansatz ist die Verwendung des Proxy-oder Strategy-Muster anwenden, die caching-Logik in eine separate Art, zum Beispiel eine CachedRepository, die verwendet dann die eigentliche db-centric-repository erforderlich, wenn der cache leer ist. Hab ich geschrieben zwei Artikel, die zeigen, wie Sie diese umsetzen mit .NET/C#, findest du auf meinem blog, hier:
Wenn Sie lieber video, beschreibe ich auch das Muster, in das Proxy-Design-Pattern auf Pluralsight, hier: