Frage

Ok, wir kann sagen, haben eine DataRepository Klasse mit den Methoden, GetNames () und GetStates (). können sagen, diese Daten in einem Webservice oder Datenbank gespeichert sind, die eine teuere Operation ist.

, sobald die erste Abfrage ausgeführt und zurückgegeben, wenn ein Verbraucher für diese Methoden gebeten, sein zurück sofort als die Ergebnisse in der DataRepository Klasse zwischengespeichert werden.

das Problem ist, für den ersten Aufruf möchten Sie Verhalten wollen async zu sein auf diesem teueren Anruf nicht blockiert. Was ist der beste Weg, dies zu codieren? Ist die Tatsache, dass diese DataRepository Klasse sowohl tatsächliche Quer boundry retrieving und Caching tut brechen Einzel Respnosibility Prinzip.

andere Gedanken über die besten Praktiken hier?

War es hilfreich?

Lösung

  

für den ersten Anruf würden Sie wollen   Verhalten sein async Blockierung zu vermeiden   auf diesem teueren Anruf. Was ist der   bester Weg, dies zu codieren?

Das ist ein Anliegen des Anrufers. Am besten ist es sowohl synchrone als auch asynchrone Schnittstellen zu schaffen, so können die Kunden entscheiden, welche für ihre Situtation geeignet ist.

  

Ist die Tatsache, dass diese DataRepository   Klasse tut sowohl tatsächliche Quer   boundry retrieving und Caching   Bruch einzige Verantwortung   Prinzip.

Ja, es bricht die SRP wenn die Repository-Klasse selbst beteiligt ist das Abrufen und Caching-Implementierung. Was mehr ist, über die Entscheidung, die Quelle in der Regel zu treffen erfordert erhebliche Logik, die ein weiterer guter Grund ist, diese Funktionen in verschiedene Klassen zu trennen. (Mit dem Standard-Vorbehalt: wenn YAGNI , dann tut es nicht)

Andere Tipps

Ist es wirklich die Repositorys Verantwortung zu wissen, ob es async oder nicht genannt zu werden? Ich würde denken, es wäre nur seinen Anruf und seine Daten zurück, wie es heißt zu werden, ist nicht seine Pflege. Ich glaube nicht, dass es auch ist seine Verantwortung, die Daten zu speichern .... wenn Sie die Daten gespeichert werden sollen, die Anrufer (einige Vermittler möglicherweise) speichern können. Das Repository sollte ziemlich einfach sein .... bitte um Daten und gibt Daten. Oder sogar IQueryable zurückgeben und das Stück lassen, dass die Daten tatsächlich bekommen die Daten müssen ...

Wenn Sie den ersten Anruf async machen haben, können Sie auch alle Anrufe async machen. Dadurch wird Ihr Code leichter zu schreiben und verstehen machen. Sie müssen nicht mit zwei verschiedenen Call prasselt beschäftigen.

Abrufen der Daten für den Benutzer:

Der Daten-Repository sollte für eine Sache verantwortlich. Es ruft die Daten aus einem Datenspeicher. Das Datenspeicher kann der teure Anruf WS oder DB oder der günstige Anruf aus dem Cache sein. Der Datenspeicher kann im Cache für die Existenz der Daten überprüfen und der Rückgabe oder die Daten aus dem WS oder DB erhält, ist es in dem Cache setzen und es dann zurück.

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