อ่านบทความเรื่อง Evolution of Finding Views by ID in Android
ทำให้เราเห็นวิวัฒนาการของ Find View by ID ในการพัฒนา Android app
มีความเป็นมาที่ยาวนานและน่าสนใจจริง ๆ
จึงเขียนสรุปสิ่งที่ได้จากบทความนี้ไว้หน่อย
ถ้าไม่มี ID ใน view ของ Android app ก็ยากที่จะทดสอบแบบอัตโนมัติอย่างมาก

ในการพัฒนา Android app นั้น

นักพัฒนาทุกคนจะทำการเข้าถึง element ต่าง ๆ ในไฟล์ XML Layout
จะต้องใช้งานผ่าน method findViewById() อย่างแน่นอน
มันดูง่ายมาก ๆ นะ

แต่เมื่อเรามี element จำนวนมาก  แน่นอนว่า App ต้องมี element ต่าง ๆ เยอะสิ
มันจึงทำให้สิ่งที่ดูเหมือนง่าย กลับกลายเป็นสิ่งที่รบกวนจิตใจอย่างมาก
กลายเป็น code ขยะหรือไร้ความจำเป็นอย่างมาก แต่ก็ต้องเขียน !!
ในบทความอธิบายว่า
นี่คือหนึ่งในความผิดพลาดที่แพงมาก ๆ ที่เกิดจากผู้สร้างมันขึ้นมา

แต่เมื่อวันเวลาผ่านไป ทีมผู้สร้างก็เข้าใจว่า
สิ่งที่สร้างมามันผิดพลาดจริง ๆ
ดังนั้นเราจึงเห็นวิวัฒนาการต่าง ๆ 

เริ่มต้นด้วย 3-party library เข้ามาลด code ก่อนเลย

ประกอบไปด้วย

  • Butterknife สร้างโดยคุณ Jake Wharton ซึ่งนักพัฒนา Android ส่วนใหญ่ต้องใช้และรู้จักแน่นอน และตอนนี้มัน Deprecated ไปแล้ว เนื่องจากการมาลอง View Binding นั่นเอง
  • AndroidAnnotaions ก็เป็นอีกหนึ่งทางเลือก

แต่เมื่อการมาถึงของภาษา Kotlin

ได้กลายมาเป็น First-class language สำหรับการพัฒนา Android app
มาพร้อมกับ Kotlin Extension method เลย
ทำ auto-generated ให้เลย 
นักพัฒนาเรียกใช้งานตาม ID ที่กำหนดในไฟล์ Layout XML ได้เลย สะดวกมาก ๆ
แต่ใช้ได้เฉพาะภาษา Kotlin เท่านั้น

ส่วนภาษา Java นั้นไม่สามารถใช้ได้
แต่ว่า method findById() ไม่ต้องทำการ cast type
ทำให้ไม่เกิดปัญหา ClassCastException อีกต่อไป
แต่ก็ยังต้องใช้งาน method findById() อยู่นะ !!

ตามจริงก่อนหน้านี้จะมีความสามารถที่ไม่ค่อยเป็นที่นิยมมากนัก

แต่มาจาก Android เลยก็คือ Data binding library
ทำให้ทำการ binding element ต่าง ๆ ในไฟล์ Layout XML เข้ากับ Data sources ได้
ซึ่งทำได้ในไฟล์ Layout XML นั่นเอง
จากนั้น Android Studio จะทำการ generate class จากไฟล์ Layout XML ให้อัตโนมัติ
เช่น activity_main.xml จะ generate class ActivityMainBinding มาให้
ใช้งานได้ทั้ง Java และ Kotlin

แน่นอนว่าปัญหา ClassCastException และ NullPointerException หายไป
แต่ก็เพิ่มเวลาในการ build มากขึ้นไปด้วย !!

ตัวล่าสุดคือ View Binding มาพร้อมกับ Android Studio 3.6 ขึ้นมา

เป็นความสามารถหนึ่งใน Data Binding นั่นเอง
แต่ถูกแยกออกมาเพื่อทำงานกับส่วนของ View เท่านั้น
เพื่อปรับปรุงประสิทธิภาพของการทำงานให้ดีขึ้นนั่นเอง
นั่นคือไม่ส่งผลกระทบต่อเวลาในการ build

ซึ่งจะไม่มี annotation ใด ๆ หรือทำการเขียนอะไรเพิ่มในไฟล์ Layout XML เลย
และทำงานแบบ one-way binding เท่านั้น
ไม่ใช่ 2-way binding เหมือนกับ Data Binding

แต่ default แล้ว View Binding ไม่ได้เปิดให้ใช้งาน
เราต้องไปเปิดความสามารถนี้ในไฟล์  /app/build.gradle
ใช้งานได้ทั้ง Java และ Kotlin

จากบทความนั้นอธิบายว่า ถ้าให้ตัดสินใจใช้งานจะใช้อะไรดี ?

คำตอบคือ View Binding เป็นทางเลือกที่ดีที่สุดในตอนนี้
แต่อาจจะไม่เหมาะสมกับคุณก็ได้นะ !!!