Ich versuche die einfache Snaplet-Konstruktion zu verstehen. Auch, wann muss ich eigentlich einen Snaplet machen und wann eine einfache Side-Library? Und wenn ich einen brauche, wie mache ich es aus einer Bibliothek heraus?
Zum Beispiel habe ich eine Reihe von DB-Funktionen, in denen ich meinen SQL-Code wie folgt einpacke.
%Vor%Jede Funktion initiiert eine neue Verbindung und schließt die Verbindung nach dem Festschreiben. Ich denke, ein Snaplet zu machen ist der Weg, die Verbindung in jeder Funktion zu vermeiden? In meinem Handler würde ich es so verwenden:
%Vor%Es funktioniert so weit. Meine Frage (n) ist / sind: Wann muss ich eine Bibliothek tatsächlich zu einem Snaplet machen? Muss ich meine einfache DB-Bibliothek in ein Snaplet umwandeln, nur um die Verbindung zu initialisieren, anstatt die Verbindung in jeder Funktion herzustellen?
Wenn ich jetzt den Schnapper mache ... Auf der Snap-Website gibt es ein kleines Beispiel für ein Top-Level-Snaplet, aber es gibt keine Spur davon, wie man einfach Pluggle-Snaplets erstellen kann.
Also habe ich meiner DB-Bibliothek die Snaplet-Initialisierungsfunktion hinzugefügt
%Vor%Ist das der richtige Weg? Ist das alles, was ich brauche, um es zu einem Pluggble Snaplet zu machen?
Dann staple ich diesen DB-Snaplet in die Haupt-App
%Vor%Jetzt habe ich nur noch die Verbindung, die meinen Request-Handlern zur Verfügung steht, oder? Also mein Handler wird:
%Vor%Das scheint nicht zu funktionieren. Was mache ich falsch? Ist dies der richtige Weg, um die Verbindung aus dem Snapleet-Handle (dbcon) zu extrahieren? Ist das in der Regel die richtige Richtung, um ein einfaches Snaplet zu konstruieren? Brauche ich in meinem Fall tatsächlich ein Snaplet?
Danke.
Handler
ist eine Instanz von MonadState
: MonadState v (Handler b v)
.
Handler
ist auch eine Instanz von MonadSnaplet
und stellt daher die Methode with
bereit:
with :: Lens v (Snaplet v') -> m b v' a -> m b v a
dbcon
ist ein Lens App (Snaplet Connection)
.
Um zum Connection
zu kommen, können wir folgendes verwenden:
conn <- with dbcon get
Normalerweise würden Sie einen Snaplet erstellen, wenn Sie Funktionen bereitstellen, von denen jeder profitieren könnte. In Ihrem Fall ist es wahrscheinlich am besten, den HDBC-Snaplet zu nutzen, mit dem Sie sich mit einer sqlite3-Datenbank verbinden können.
Checkout Ссылка für ein gutes Tutorial zur Verwendung des HDBC-Snaplet.
Tags und Links haskell snap-framework