Lawndart, funzioni di storage per web apps

Di - 16 February 2013 - in

Nell’articolo di oggi torniamo a parlare di web applications presentando la libreria Lawndart sviluppata da +Seth Ladd, Developer Advocate presso Google.

Questa libreria — concepita per un utilizzo di tipo key->value ed ispirata a lawnchair, libreria JavaScript per il client-side storage — ci consente di sviluppare moderne web applications fruibili anche offline, offrendo un’interfaccia robusta ed intuitiva per le diverse tecniche di storage localStorage, indexedDB, WebSQL (quest’ultima non ancora supportata in Firefox).

Questo esempio, presente sul blog dell’autore, mostra la semplicità di utilizzo:

 var store = new IndexedDbAdapter('teststore', 'testdb');
 store.open()
  .then((_) => store.nuke())
  .then((_) => store.save(id, "hello"))
  .then((_) => store.save("is fun", "dart"))
  .then((_) => store.getByKey("hello"))
  .then((value) => query('#$id').text = value);

Essendo l’interfaccia di Lawndart Future-based, è necessario invocare i metodi come argomenti dei metodi Future.then(), così da essere sicuri che l’esecuzione di un metodo avvenga al completamento del precedente: dopo avere inizializzato IndexedDbAdapter, il programma

  • apre il database
  • cancella il contenuto (se presente) con nuke
  • salva due record
  • data la chiave ottiene un valore
  • imposta il valore ottenuto nello step precedente all’elemento HTML con id “text”

È importante notare che le istruzioni, ad eccezione della penultima, non restituiscono un valore utile nel caso di questo programma; per convenzione, un valore non utile viene passato come _.

Per utilizzare Lawndart nella nostra applicazione dobbiamo aggiungere la dipendenza lawndart al nostro pubspec.yaml.

name: lawndart_test
dependencies:
  lawndart: any

Ricordiamo che è possibile gestire il file pubspec.yaml anche con il Pubspec Editor presente in Dart Editor:

Screenshot

L’API di Lawndart è minimale, le funzioni disponibili sono:

  • open() Apre il database e lo rende disponibile in lettura/scrittura
  • nuke() Svuota il database
  • save(value, key) Scrive un valore accessibile data una chiave
  • getByKey(key) Ottiene un valore, data una chiave
  • keys() Restituisce tutte le chiavi
  • all() Restituisce tutti i valori
  • batch(map) Memorizza tutti i valori e le rispettive chiavi
  • getByKeys(keys) Restituisce più valori, date più chiavi
  • exists(key) Restituisce true se una chiave esiste, false in caso contrario
  • removeByKey(key) Rimuove il valore della chiave
  • removeByKeys(keys) Rimuove tutti i valori delle chiavi

Nella repository su GitHub sono disponibili due esempi di applicazioni, Todo e Simple Run Through, ovvero una implementazione del codice di esempio visto in apertura:

library index;

import 'package:lawndart/lawndart.dart';
import 'dart:html';

runThrough(Store store, String id) {
  store.open()
  .then((_) => store.nuke())
  .then((_) => store.save(id, "hello"))
  .then((_) => store.save("is fun", "dart"))
  .then((_) => store.getByKey("hello"))
  .then((value) => query('#$id').text = value);
}

main() {
  runThrough(new WebSqlAdapter('test', 'test'), 'websql');
  runThrough(new IndexedDbAdapter('test', 'test'), 'indexeddb');
}

Gli sviluppi futuri prevederanno l’uso della classe Stream per i metodi getByKeys() e all(), miglioramenti nella gestione di chiavi e valori diversi da String e l’integrazione in drone.io, servizio gratuito di continuous integration di cui parleremo prossimamente.

Fonte: Seth Ladd’s Blog

Leave a Reply

Claudio d'Angelis Articolo scritto da

Programmatore e studente di Informatica, appassionato di musica, web e sistemi UNIX. Collabora con Googlab dall'Ottobre 2012.

Contatta l'autore

Previous post:

Next post: