[iOS Dev] Model Mapping with Mantle

บ่อยครั้งที่เราต้องทำงานกับข้อมูลจาก API และแน่นอนกระบวนการที่จะหนีไม่พ้นเลย นั่นคือการทำ Model Mapping (อย่างไรก็ตาม ยังมี Developer จำพวกที่ใช้ NSDictionary ไปตลอด ซึ่งเป็นวิธีที่ห่วยมาก)

แน่นอนว่า การทำ Model Mapping เราแทบจะเขียน Code พื้นฐานเหมือนเดิมตลอด เช่น initWith... , encodeWithCoder method และอื่นๆ โค้ดพื้นฐานที่จำเป็นต้องเขียน ซ้ำๆ เดิมทุกครั้ง เรียกว่า "Boilerplate Code" 

ซึ่งวันนี้จะมาแนะนำ  Mantle  ซึ่งจะมาช่วยเราในการสร้าง Model จาก JSON API
โดยวันนี้เราจะดึงข้อมูล JSON แบบ Local จากการสร้างไฟล์ขึ้นมาเองนะ 
ผมลง Mantle ผ่าน Cocoapods เหมือนเดิมนะ ใครไม่รู้ว่ามันคืออะไรก็เข้าไปดู
มาเริ่มกันที่การสร้าง Model Object เราจะสร้างโดยที่ Subclass MTLModel นะ


จาก JSON ที่ได้เราก็น่าจะสร้าง Model Property ได้ตามนี้เนอะ


จากที่เราต้องมานั่ง InitWith.... ให้กับ Property ทุกตัวพวกนี้ พร้อมกับแก้ไขชนิดของตัวแปรต่างๆ เช่น เราอยากให้ข้อมูลวันเกิดที่ได้รับมาเก็บเป็น NSDate แทนที่จะเป็น NSString เป็นต้น ก็จะมีเจ้า Mantle นี่แหละ มาช่วยเราหมดเลย

โดย method แรกที่ต้อง Implement คือ - (NSDictionary)JSONKeyPathsByPropertyKey; โดยที่ method นี้จะทำการเชื่อมโยง Property ของ Model ของเราเข้ากับ JSON key ให้อัตโนมัติ ให้สังเกตุว่าอันไหนที่ key เหมือนกันเป๊ะๆ Mantle จะทำให้อัตโนมัติครับ (ทุก method เป็น Class method นะครับ (+))


คราวนี้ก็จะมาเริ่ม Manipulate ข้อมูลกันล่ะ เริ่มจากข้อมูลวันเกิดจาก NSDate <-> NSSTring


ข้อมูล URL ของเว็บไซต์ จาก NSURL <-> NSString


ข้อมูลพิกัดของสถานที่จาก CLLocationCoordinate2D <-> NSDictionary


ข้อมูลสถานภาพจาก OZRelationshipStatus (NSInteger) <-> NSString


ข้อมูลสถานภาพทางหน้าตาจาก BOOL <-> JSON boolean


เมื่อเตรียม Class เรียบร้อยแล้ว เราก็จะมาสร้าง Model Instance กันล่ะ


เท่านี้เองครับ ก็ได้ Model ที่ Mapping Property ได้อย่างสมบูรณ์ :) อีกอย่างคือ นอกจากจะสร้าง Model Object จาก JSON ก็ยังสามารถสร้าง JSON จาก Model Object โดยที่ Convert Type กลับได้อย่างถูกต้องเพื่อส่งขึ้น Server (จะเห็นว่าแต่ละอันที่เราแปลงจะต้องเขียน Reverse Block ด้วย ใช้ตอนนี้แหละ)


เท่านี้ล่ะครับ :)

Github Repositoryhttps://github.com/macbaszii/MantleModel

Further Reading

Popular posts from this blog

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

5 TED Talk ที่จะช่วยให้คุณทำงานดีขึ้น