ทำไมเราจะต้องใช้ Xamarin
ปัจจุบันการเขียน App แบบ Native ด้วย Android จะต้องใช้ภาษา Java และ iOS จะต้องใช้ภาษา Objective-C เท่านั้น จะเห็นว่าโครงสร้างและรูปแบบการเขียนของ 2 ภาษานี้นั้นต่างกัน และเป็นการยากที่จะให้นักพัฒนาโปรแกรมที่เขียนภาษาอื่น ไปใช้ภาษา Java หรือ Objective-C
ความสามารถของ Xamarin
Xamarin ไม่ได้มีการใช้ภาษาของตัวเองแต่จะใช้ภาษา C# ที่ทำงานบน .Net Framework แปลง Code ที่เขียนด้วย C# ให้สามารถ Compile ด้วยภาษา Java และ Object-C เพื่อที่จะให้ Apps ที่เขียนด้วย C# นั้นสามารถทำงานได้เหมือนกันการเขียนด้วยภาษา Java หรือ Objective-C นั่นเอง
ถ้าแบ่งเครื่องมือพัฒนาแอพฯเป็นประเภทคร่าวๆก็มีดังต่อไปนี้
1) Native - ภาษาที่ทางผู้พัฒนาแพลตฟอร์มเป็นคนจัดมาให้ (Android - Java, iOS - ObjC/Swift, Windows Phone - C#)
2) Hybrid - HTML5 + CSS + Javascript มีการเชื่อมต่อกับ Runtime เพื่อเรียกคำสั่งบางอย่างที่ HTML5 ทำไม่ได้ พวก PhoneGap, Kendo จะอยู่ในจำพวกนี้
3) ภาษาอื่นที่คอมไพล์เป็น Native - เขียนด้วยภาษาที่ทำขึ้นมาเอง แต่สุดท้ายคอมไพล์ออกมาเป็น Native ซึ่งประเภทนี้ก็แบ่งออกเป็นสองแบบอีกคือ
- ประเภทที่เขียนทีเดียวรันได้ทุกแพลตฟอร์ม (Write Once Run Anywhere) เช่น Marmalade, Unity3D, libgdx ฯลฯ
- พวกที่แชร์โค้ดกันระหว่างแพลตฟอร์มได้ส่วนหนึ่ง แต่อีกส่วนหนึ่งต้องเขียนแยกกันไปตามแต่ละ Platform (Code Sharing) เช่น Xamarin
จุดแข็งของ Native คือประสิทธิภาพดี แต่แลกมากับข้อเสียที่ว่าเขียนยากพอควร และข้อเสียใหญ่อีกข้อคือ เขียนบน Platform ไหน ก็รันได้แค่บน Platform นั้น ถ้าจะไปรันบนแพลตฟอร์มอื่นก็ต้องเขียนใหม่เท่านั้น
จึงมีคนคิดค้นเทคโนโลยีพัฒนาแอพฯ Cross Platform แบบ Write Once Run Anywhere หรือเขียนทีเดียวรันได้หมดทุกแพลตฟอร์ม หลักๆมีอยู่สองแนวคิดคือ
1) Hybrid - ใช้ HTML5 พัฒนาแอพฯขึ้นมา ข้อเสียหนักๆอยู่ที่เรื่องของประสิทธิภาพ โดยเฉพาะอย่างยิ่งมือถือที่ Mass อย่างแอนดรอยด์ราคาถูก (พูดง่ายๆคือมีปัญหากับเครื่องส่วนมาก) และการทำ UI ให้ดูสอดคล้องกับ Native UI ก็ทำยาก อาจจะมีบางตัวที่ทำได้เช่น Kendo แต่ก็ไม่ได้ลื่นไหลอยู่ดี
2) Native Cross Platform - ใช้ภาษาอะไรบางอย่าง เช่น C, Java, C# พัฒนาแอพฯขึ้นมาแล้วคอมไพล์เป็น Native ข้อดีคือประสิทธิภาพดีเยี่ยมเพราะเป็น Native ข้อเสียคือส่วนใหญ่พวกนี้จะมี Runtime มาครอบอีกทีหนึ่ง และการที่มันไม่ได้ลงไประดับ Native โดยตรง แต่ผ่าน Runtime พวกนี้ ฟีเจอร์เลยจะถูกจำกัดด้วย Runtime ของเครื่องมือนั้นๆ พอมีอะไรใหม่ๆในแพลตฟอร์มก็มักจะใช้ไม่ได้ หรืออีกนานกว่าจะได้ใช้
แนวคิดของ Xamarin
ใช้วิธีสร้าง Core ขึ้นมาแชร์กันตรงกลาง (ADO, Manager, Library, etc.) และแตกส่วน View-Controller ออกเป็นแต่ละแพลตฟอร์มด้วยและเขียนด้วยโครงสร้างภาษาแบบเดียวกับ Native เช่นบนแอนดรอยด์ก็ต้องเขียนด้วย xml ใช้ findViewById เพื่อเข้าถึง View นั้นๆ มีการเรียกใช้ Adapter อะไรครบถ้วนเหมือนตัว Native Android ทุกประการ