Letezik-e ilyen framework/lib Web+Android+iOS-re?
Aki elolvasva a cimet rogton linkelne a phonegapet vagy az iceniumot (esetleg a flexet), azt megkernem hogy elobb olvasson tovabb, es csak akkor linkelje, ha az altala emlitett technologia biztosan tudja ezeket.
Eloszor is: kozepes szinten ertek webfejleszteshez, Android alkalmazasok fejlesztesehez es iOS alkalmazasok fejlesztesehez is. A hetekben ismerosoktol tobb olyan mindharmat erinto otletet kaptam, aminek ugy kezdenek neki, hogy az altalam kerdezett db frameworkot megkeresnem ha letezik, es megirnam ha nem letezik (annak tudataban is, hogy nemely otletrol (nem mindrol) nehezen tudom elkepzelni, hogy valaha tul fogja lepni a bevetele az uzemeltetes kolsegeit (tipikus IT startup betegseg, de ez most mindegy)).
Tehat adott a kovetelmeny:
-van egy kozponti DB, webes feluletrol nyilvan az egeszet el szeretnek erni, mar csak egy csak webrol elerheto admin felulet miatt is. Ez a FULL DB
-adottak a mobilalkalmazasok iOS es Android alapokon. Mindkettonel teljesen mas jellegu DB megoldast szoktak hasznalni. Az Androidnak sajat (szerintem kifejezetten jol hasznalhato es baratsagos) SQLite konyvtara van, iOS-nel pedig valaszthatsz a C SQLite library es az Objective-C/Cocoa Touch-os xcode altal is tamogatott CoreData megoldasa kozt (nyilvan ez utobbit konnyebb hasznalni minden szempontbol, de az elozo is tulelheto)
-Mig egy admin feluletet is ellato weboldal siman elbir egy tobbmillio rekordos db-vel, addig egy iOS-t vagy egy Androidot futtato eszkozon ennel tobb okbol is joval kevesebb rekordot erdemes tarolni. Van pl. 1'000'000 user, abbol 1 user adatahoz ferhetunk csak hozza eleve a webappbol, akkor csak ahhoz a userhez kapcsolodo adatokat szeretnek a kozponti db-bol lefetchelni.
--Ugyanakkor illik egy mobilappot ugy megirni, hogy offline is mukodjon, ergo ha nincs se tererod, se mobilneted, se wifid (iOS-en ezt tudod ellenorizni a Reachability class-szal pl.), akkor is tudjal abbol a db-bol olvasni es abba a DB-be (akar kesleltetetten) irni.
Kovetkezmeny:
1. Alapeset: le akarunk kerdezni minden adatot, ahol a userunk aki epp be van lepve a FOREIGN KEY a tobbi adathoz, ezeket letoltjuk a mobilapphoz tartozo PARTIAL DB-jebe
2. Azoknak a tovabbi FOREIGN KEY-eihez tartozo adatokat is le akarjuk kerdezni a FULL DB-BOL a PARTIAL DB-be
3. Rajovunk, hogy ez igy nem eleg, van par statikus adattabla amit midenkeppen le akarunk kerdezni egeszben a FULL DB-bol a PARTIAL DB-be (pl. egy user jogosultsagokat vagy kategoria ID-kat tartalmazo altalaban kismeretu tabla), mert anelkul nem mukodik transzparensen az app offline (ezt mondjuk be tudjuk allitani egy config file-ban vagy egy include-ban)
4. Ha mar van configunk/include-unk, a FOREIGN KEY-ekkel meg nem jelolheto (pl. mas db-ben levo, vagy egy tablaban egyszerre ket oszlopban is elofordulo (pl. contact1: x user es contact2: y user es az is kell ahol a userunk x es az is ahol a userunk y)) adatokat is jo ha le tudjuk menteni, erre jo ha kulon meg tudunk adni szabalyokat, hogy "ezzel azt is fetch-eld le mindig a FULL DB-bol a PARTIAL DB-be"
+Idonkent valtoztatunk a tablakon (ALTER TABLE ADD COLUMN), ez ha pl. a szerveren (FULL DB, amit a webapp hasznal) megtortenik, akkor arrol valahogy (pl. verzioszam valtoztatasaval) szerezzen tudomast a szinkronizalasi kiserletnel az iOS/Android app (PARTIAL DB) is, mielott barmi tortenne, es modositsa a sajat semait ennek megfeleloen.
Kivant vegeredmeny:
-ugyanugy tudjuk megirni az SQL query-ket az iOS appban, az Android app-ban, es a webappban, de az iOS es az Android appban csak az a szelete legyen bent az adatbazisnak, amelyik az adott user interakcioihoz kell (ami nyilvan joval kevesebb rekordot takar).
-mindehhez a programozonak eleg legyen a configolason kivul es az "import fuggvenykonyvtar"-on kivul egy fuggvenykonyvtar.syncdb(userid)/[fuggvenykonyvtar syncdb forUser: userid] utasitast kiadnia
-primary key-ekben legyen mindig a webes appdb-nek igaza (pl. ott kezdodhet 10001-tol a primary key, a 10000 alattiak meg local recordok, es a webserver mogott futo db azoknak szinkronizalaskor ad egy globalis primary keyt amit a mobilapp letezo kapcsolat eseten magatol befrissit erre az egyetlen sync parancsra, ha a mobilapp 10001-edik local rekordot akar kesziteni, akkor meg Android/Java eseten ugye dobjon kivetelt, iOS/Objective-C/Cocoa Touch eseten meg returnoljon false-t/NSNull-t/Egyeb NSObject-et, es majd a programozo lekezeli, hogy hogy kene kozolni a userrel, hogy mostmar illene internetre csatlakozni).
-Amikor letrehozunk egy adatbazis semat, legyen egy egyszeru user tabla semank aminek dedikalt helye van a configban (az alapjan donti el a "sync" parancs, hogy milyen db szeletet ker le), es azon kivul amikor a tobbi CREATE TABLE/ALTER TABLE utasitast megirjuk, az jojjon letre transzparensen ugyanugy a webapp PostgreSQL/MySQL/Oracle db-jeben (PDO?), es ugyanugy az Android SQLite libjeben, es ugyanugy az iOS C-szintu SQLite db-jeben es/vagy a Cocoa Touch CoreData megoldasaban. Tehat ehhez is legyen eleg a config fajlba beirni a db szerver adatait, es a mar emlitett fuggvenykonyvtar.syncdb(userid)/[fuggvenykonyvtar syncdb forUser: userid] legyen eleg arra, hogy letrehozza/verziovaltozas eseten editalja a db-t semastol.
-emiatt lehetseges egy overhead: modification_date oszlop kotelezoen hozzaadodik pl. minden tablakhoz es/vagy edits/deletions tabla letre kell hogy hozodjon a szinkronizalas idoinek menedzslesere, stb.
-commit mindket helyen nyilvan akkor tortenik, ha a sync parancs vegen is van egymassal connection es ACK, kulonben rollback
[Felmerulhet a kerdes sokakban, hogy mi tortenik, ha nem csak egy user adatai kellenek, hanem egy usergroupe-e: lekerdezed a FOREIGN KEY-es modszerrel a group-ot es annak a tobbi rekordjat, es meg is jon resultkent a tobbi user, azoknak is besynceled az adatait userkey alapjan (vagy beallitod a configban, hogy GROUP ID-ra is menjen olyankor vegig)]
Kerdesek:
-Van ilyen fuggvenykonyvtar/framework? Az Icenium/Phonegap tudja ezt/ezeket/hasonlot ami _konnyen_ ezze alakithato? Bar az igazat megvallva azok tudtommal UI frameworkok (is), jobban orulnek, ha valami egyedul ezt a DB sync-es dolgot tudna (a la UNIX: "do one thing and do it well"), a maximum amit meg talan szivesen vennek az a DB sorobjektumainak az adott nyelv osztalypeldanyava valo konvertalasa (amit szerintem konnyebben fogok talalni joval, mint ilyen libet/frameworkot), de ez mar opcionalis, kevesbe lenyeges szempont.
-Amennyiben nincs ilyen, mennyire volna szerintetek igeny egy ilyen/ilyesmi libre? Lehet nekiesnek valami hasonlonak, ha az egyik-masik startup tervvel megis meggyoznek az ismerosok, hogy igenis eletkepes (mint irtam, mindnek igy esnek neki kozuluk, hogy ezt elobb megoldanam). :)
- Tovább (Letezik-e ilyen framework/lib Web+Android+iOS-re?)
- 5491 megtekintés