วันนี้เจอ code ที่เขียนด้วยภาษา Swift ที่น่าสนใจ
เกี่ยวกับการใช้งาน protocol
แถมเจอบทความอธิบายเรื่องนี้ด้วย  Protocol Composition
เลยนำมาสรุปกับ code ที่พบเจอด้วยเลย

โดย code เหมือนจะดูดีนะ แต่มีหลายเรื่องที่สามารถปรับปรุงให้ดีขึ้นได้

มาเริ่มกันเลย

คำอธิบาย
ใน protocol สำหรับการจัดการข้อมูล
ซึ่งมีความสามารถในการอ่านและเขียนข้อมูล
ดังนั้นถ้า struct/class ทำการ implement protocol นี้
ต้องทำการ implement ทั้งการอ่านและการเขียนเสมอ
เหมือนจะดูดี

แต่ไป ๆ มา ๆ เจอ code แนวนี้ใน project อีก

คำอธิบาย
คำถามที่เกิดขึ้นมาทันทีคือ มันคือ read only
แล้วทำไมต้องมีการเขียน หรือ method write() ด้วย ?
ไม่แน่ใจนักพัฒนาหลาย ๆ คนเคยเจอ code แนวนี้หรือไม่ ?

ถ้าเจอแล้ว สิ่งที่ทำคืออะไร ?

  • ปล่อยมันไป อย่าไปยุ่งกับมัน
  • ถ้าต้องใช้ protocol นี้อีกก็ทำเหมือน ๆ กัน
  • ต้องแก้ไข
  • แก้อะไร มันมีอะไรผิดหรอ

ในบทความนี้จะทำการแก้ไขและปรับปรุงนิดหน่อย

สิ่งแรกที่ต้องเข้าใจก่อนคือ code ชุดนี้มันมีอะไรที่ต้องปรับปรุง
ถ้าไม่รู้จะทำอะไรกัน !!
จาก code ต้องการเพียงการอ่านข้อมูลเท่านั้น
ดังนั้นปัญหาที่เจอคือ เรื่องของ ISP (Interface Segregation Principle)
นั่นหมายความว่า ผู้ใช้งานควรใช้ interface ที่แตกต่างกันไปตามความต้องการ
ในที่นี้ interface ของเราคือ protocol นั่นเอง

โดยจะสร้าง protocol ขึ้นมา 2 ตัวคือ DataReader และ DataWriter

จากนั้นทำการแก้ไข struct/class ที่ทำการ implement protocol เดิมดังนี้

ดูเหมือนจะดีขึ้นแล้วนะ

แต่สิ่งที่น่าสนใจคือ ถ้ามี protocol จำนวนเยอะ ๆ ละ
ชีวิตไม่น่าจะดีเท่าไร
ดังนั้นใน swift นั้นมี typealias ให้ใช้
ทำให้ code อ่านง่ายขึ้นดังนี้

มาถึงตรงนี้น่าจะทำให้ code ดูดีขึ้นกว่าเดิมมาบ้างนะ

สิ่งที่นักพัฒนาควรต้องทำคือ
การปรับปรุง code ต่าง ๆ ให้ดีขึ้นอยู่อย่างเสมอ
แล้วชีวิตจะดีขึ้นครับ

ขอให้สนุกกับการ coding ครับ

Reference Websites
https://dzone.com/articles/protocol-composition-in-swift?edition=334920