2013-04-15 14 views
5

Sto provando a convertire un'applicazione C# che avevamo sviluppato su un'applicazione iPad. Mentre sviluppavamo l'app con Entity framework, sto cercando una controparte per iOS.ORM per SQLite in iOS

Secondo this answer, ci sono diverse librerie ORM per SQLite in iOS:

Ma dopo aver letto ciascuno dei siti web, ho ancora non posso decidere quale pacchetto usare. Chiunque abbia esperienza con uno di loro può dirmi vantaggi/svantaggi dei pacchetti?

+2

Hai guardato in Core Data? http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html –

+1

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

+0

@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. –

risposta

2

Mi sono occupato del numero limitato di ORM per un po 'di tempo e alla fine ho fatto qualcosa per migliorare le opzioni limitate disponibili. Ho scritto un ORM e l'ho rilasciato sotto una licenza BSD che tutti possono usare. È pubblicato su GitHub.

6

AGGIORNAMENTO: DBAccess ora è stato sostituito dallo sharm ORM open source.

Abbiamo recentemente rilasciato un servizio gratuito per distribuire e utilizzare ORM per Objective-c/iOS denominato DBAccess, che può essere scaricato da http://db-access.org/, ci sono voluti diversi anni per svilupparsi e ora è stato distribuito in molte applicazioni.

Potrebbe non essere per tutti, ma spero che il nostro impegno possa aiutare alcuni nella comunità.

NOTA, sono stato avvertito del fatto che è cattiva forma per promuovere i propri prodotti in un forum come questo, ma volevo solo aggiungere che io sto solo postando questo in risposta alla OP perché Sento che porta qualcosa di utile al tavolo e spero sinceramente che possa rivelarsi utile per alcune persone, anche se non è per tutti.

AGGIORNAMENTO: DBAccess ora è stato sostituito dallo sharm ORM open source. È compatibile API ed è disponibile su github. http://sharkorm.com e https://github.com/sharksync/sharkorm

Grazie Adrian_H

+0

Qual è la licenza per il tuo progetto? Sono un po 'diffidente a provarlo senza sapere in cosa mi sto cacciando :). – Max

+0

Ciao Max, stiamo andando per la licenza MIT. Sembrava il più semplice e più applicabile per i nostri desideri. –

+0

Ciao Adrian, c'è qualche guida per aggiornare la tabella? Ti piace aggiungere, rinominare, rimuovere campo dalla tabella? –

2

Il modo migliore per convertire un C# app per iOS è Xamarin penso, c'è una biblioteca sqlite-net, funziona bene.

1

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
Problemi correlati