TL; DR: LabQLite:
- è un ORM SQLite flessibile per IOS
- ha medio e basso livello boilerplate pre-scritto per CRUD
- metà ha pre-scritta boilerplate di basso livello per il controllo del database
- contiene uno script di shell che analizza un db SQLite 3 e distribuisce le classi che ereditano i metodi CRUD da
LabQLiteRow
- ha 100 test unitari in v1.0
Full Disclosure: Questa è una libreria che ho sviluppato. È rilasciato nel pubblico dominio.
Long Version
Partenza LabQLite. È un po 'moneta (a seconda della licenza che si ottiene), ma penso che sia il contendente più forte là fuori per SQLite su iOS.
Viene fornito con uno script di shell che può analizzare il file di database SQLite per voi, sputare file di classe corrispondenti alle tabelle e alle viste. Ho notato che hai detto che vieni da un precedente progetto. Se è possibile esportare un file db SQLite da quel progetto, è possibile essere operativi e in esecuzione con classi di modelli utilizzabili in pochi secondi (in base alla dimensione db) utilizzando lo labqlitemodelgen.sh
per ottenere tutti i modelli.
Nota: Se le tabelle e le viste sono denominati con caratteri di sottolineatura (ad esempio my_table_name), la corrispondente classe che viene generato seguirà le convenzioni di denominazione Objective-C (per esempio MyTableName) - allo stesso modo per le colonne della tabella per modellare proprietà della classe.
LabQLite in versione 1.0 viene fornito con 100 test di unità.
LabQLite anche elimina quello che mi piace chiamare la boilerplate medio livello. In altre parole, di solito, una volta ottenuto tutto il linguaggio C per un progetto SQLite su iOS, devi ancora scrivere i metodi CRUD per i tuoi modelli, e forse devi scrivere metodi di supporto (a seconda della tua applicazione) pure. (MODIFICA: Questo è comune con le soluzioni open-source più piccole).
Con LabQLite, non si scrive il livello medio o basso di bp. Le classi del modello generate ereditano da una superclasse che TUTTA ciò è per te. Inoltre, le classi generate non sono essi stessi riempito con i metodi CRUD - in modo che le file di classe modello finiscono per guardare più pulito che se fossero pieni di CRUD;)
integrazione è rapido se avete il file db SQLite nella vostra fascio di app:
/**
@abstract Activates a global singleton shared instance of an
LabQLiteDatabaseController with the database at the file path
specified.
@param filePath The file path to the sqlite3 database file in
the local bundle.
@param savePath The path (including file name) to which the
sqlite3 database file retrieved from the main bundle should
be saved.
@param NSDocumentDirectoryIsRootPath Prepends the savePath with
the path to the NSDocumentDirectory.
@param overwrite If set to YES, then this method will overwrite
any file it finds at the savePath. Otherwise, it will not.
@param error The standard error capturing double indirection
pointer.
@return Whether the activation of the shared database controller
was indeed successful.
@see
initWithFileInFromLocalBundle:toBeCopiedToAndUsedFromDirectory:assumingNSDocumentDirectoryAsRootPath:overwrite:error:
*/
+ (BOOL)activateSharedControllerWithFileFromLocalBundle:(NSString *)filePath
toBeCopiedToAndUsedFromDirectory:(NSString *)savePath
assumingNSDocumentDirectoryAsRootPath:(BOOL)NSDocumentDirectoryIsRootPath
overwrite:(BOOL)overwrite
error:(NSError **)error;
ci sono altri integrazione veloci si avvicina troppo, se non metti il file db SQLite in bundle della tua app.
Il codice è adeguatamente commentato sia con documenti sia con commenti incorporati.
Un altro fattore da considerare è manutenibilità. Certo, gli omaggi hanno una rapida "rilevabilità", ma ciò che si impara rapidamente è che (a.) L'integrazione del framework/libreria è veloce, ma (b) la maturazione della tua app è più lenta perché cambiamenti significativi nella tua app richiedono cambiamenti significativi per il codice del modello (ad es. piastra di cottura media e bassa).
LabQLite è scritto in Objective-C e quindi è utilizzabile, ad esempio, nei sistemi legacy e nelle app moderne.
LabQLite concettualmente è come una "scala estendibile".'Cioè, se si voleva, si potrebbe:
- leva le funzioni di generazione di classe del modello e del controller di database di alto livello per costruire la vostra applicazione, o
- leva solo il controller del database, e costruire le vostre classi personalizzate che comunicare con metodi di lavorazione del controller, o
- semplicemente passare
NSString
query nell'oggetto oggetto di database o il controller database per l'elaborazione
Quindi, non si è incasellato nel usando LabQLite come un ORM ... né totalmente né parzialmente. Esistono anche tipi di oggetto chiamati LabQLiteStipulation
s che incapsulano la logica per i condizionali. Quindi c'è anche flessibilità.
Tieni d'occhio https://twitter.com/labitorysupport/ per gli aggiornamenti.
Sommario
I punti di forza di LabQLite sono:
- Speedy integrazione di database di
- Aumento progetto manutenibilità
- rapida generazione di modello di oggetti
- flessibilità tra alta, media e accesso a basso livello a SQLite
- friendly per sistemi legacy
- ben documentato all'interno del codice
- rispettabile unità testato
Hai guardato in Core Data? http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html –
se si sta riprogettando il database, sono d'accordo con @SB., si dovrebbe provare Core Data, ma se si prevede di utilizzare lo stesso database (o la struttura del database) dalle librerie che si menzionano che ho lavorato con fmdb con risultati piuttosto buoni, è veloce e facile da usare (non ho testato gli altri) – tkanzakic
@tkanzakic Grazie per il tuo ottimo consiglio. La riprogettazione del database è l'ultima cosa che vogliamo fare dato che abbiamo già un database esistente dall'applicazione C# corrente. –