layout: true class: center, middle --- # KVCMapping -- .footnote[ Nicolas Bouilleaud - @_nb Capitaine Train ] --- ## Convertir des données brutes en objets du modèle. --- ## JSON ➡ CoreData --- class: serif ## Consommer des Services Web --- layout: true class: left, middle --- ### ## 1. Requête réseau ## ## ## --- ### ## 1. Requête réseau ## 2. Parsing JSON/XML ## ## --- ### ## 1. Requête réseau ## 2. Parsing JSON/XML ## 3. Import en base ## --- ### ## 1. NSURLConnection ## 2. NSJSONSerialization ## 3. `obj.property = value[key]` ## --- ### AFNetworking ## 1. Requête réseau ✅ ## 2. Parsing JSON/XML ✅ ## 3. Import en base ## --- ### Mantle ## 1. Requête réseau ## 2. Parsing JSON/XML ✅ ## 3. Import en base ✅ ## 4. Réinvente CoreData 💀 ??? “Remplace” plus que réinvente. --- ### Realm ## 1. Requête réseau ## 2. Parsing JSON/XML ✅ ## 3. Import en base ✅ ## 4. Réinvente CoreData 💀 --- ### MagicalRecord ## 1. Requête réseau ## 2. Parsing JSON/XML ## 3. Import en base ✅ ## 4. CoreData Helpers ✅ --- ### RestKit ## 1. Requête réseau ✅ ## 2. Parsing JSON/XML ✅ ## 3. Import en base ✅ ## 4. CoreData --- ### ## 1. NSURLConnection 😃 ## 2. NSJSONSerialization 😃 ## 3. `obj.property = value[key]` ## 4. CoreData 😃 --- ### ## 1. NSURLConnection 😃 ## 2. NSJSONSerialization 😃 ## 3. KVCMapping 😃 ## 4. CoreData 😃 --- layout: true class: center, middle --- # Made for CoreData ??? * Au contraire du mapping fait par RestKit et Mantle, KVCMapping utilise les NSEntityDescription pour l’import * Par contre, le mapping est indépendant de CoreData. (Au contraire de MagicalRecord ou Groot). -- background-image: url(KVCMapping-complexmodel.png) --- ## Dictionnaire de mapping --- layout: true class: left, top --- ## Mapping clé/attribut ``` @{ @"id": @"identifier", @"name": @"name", @"lat": @"latitude", @"lng": @"longitude" } ``` --- class: center, middle, serif2 ## Démo ??? - modèle plat - pas de relations - “bad data” - ValueTransformer compliqué. C’est l’intérêt d’avoir un système de mapping: on peut se concentrer sur les problèmes difficiles. --- ## ValueTransformers ``` @{ @"id": @"identifier", @"name": @"name", @"lat": @"latitude", @"lng": @"longitude", @"created_at": @"isoDate:creationDate" } ``` --- ## Conversion Automatique ``` @{ @"id": @"identifier", @"name": @"name", @"lat": @"latitude", // latitude and @"lng": @"longitude", // longitude are numbers @"created_at": @"isoDate:creationDate" } ``` --- ## Relations ``` @{ @"id": @"identifier", @"name": @"name", @"lat": @"latitude", @"lng": @"longitude", @"created_at": @"isoDate:creationDate", @"country_id": @"country.identifier" } ``` ??? * y compris les to-many relationships --- ## Batch Import -- ## Entités -- ## Mapping inverse -- ## Mapping complexe (1:n) ??? - A propos des “bad data” et de la validation: sujet distinct. (Hint to Validate Delete and Save.) --- layout: true class: middle, center --- ## opensource github.com/n-b/KVCMapping --- ## opensource (who cares) ??? - En guise d’introduction, c’est en fait un vieux projet. Commencé avant CT, quasiment pas touché depuis plus d’un an. - Il y a d’autres frameworks qui font la même chose, mais celui-ci c’est le mien. - Utilisé en prod: pour CT avec un modèle complexe, et pour Bicyclette avec un modèle simple mais des sources de données variées et hétérogènes. - Pas encore un pod/framework pour Carthage. A venir. - Mac et iOS, évidemment. --- layout: false class: left, bottom ## Links - https://github.com/n-b/KVCMapping - https://github.com/gonzalezreal/Groot - https://github.com/RestKit/RestKit#overview - https://github.com/QueryKit/QueryKit - https://github.com/SugarRecord/SugarRecord - http://www.cimgf.com/2012/05/29/importing-data-made-easy/ - https://github.com/magicalpanda/MagicalRecord - https://github.com/Mantle/Mantle