Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

Swift :: ลองปรับปรุงการใช้งาน protocol กันนิดหน่อย

$
0
0

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

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

มาเริ่มกันเลย [gist id="f702eba2cea3970f917b30f5eacff07a" file="1.swift"] คำอธิบาย ใน protocol สำหรับการจัดการข้อมูล ซึ่งมีความสามารถในการอ่านและเขียนข้อมูล ดังนั้นถ้า struct/class ทำการ implement protocol นี้ ต้องทำการ implement ทั้งการอ่านและการเขียนเสมอ เหมือนจะดูดี

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

[gist id="f702eba2cea3970f917b30f5eacff07a" file="2.swift"] คำอธิบาย คำถามที่เกิดขึ้นมาทันทีคือ มันคือ read only แล้วทำไมต้องมีการเขียน หรือ method write() ด้วย ? ไม่แน่ใจนักพัฒนาหลาย ๆ คนเคยเจอ code แนวนี้หรือไม่ ?

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

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

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

สิ่งแรกที่ต้องเข้าใจก่อนคือ code ชุดนี้มันมีอะไรที่ต้องปรับปรุง ถ้าไม่รู้จะทำอะไรกัน !! จาก code ต้องการเพียงการอ่านข้อมูลเท่านั้น ดังนั้นปัญหาที่เจอคือ เรื่องของ ISP (Interface Segregation Principle) นั่นหมายความว่า ผู้ใช้งานควรใช้ interface ที่แตกต่างกันไปตามความต้องการ ในที่นี้ interface ของเราคือ protocol นั่นเอง โดยจะสร้าง protocol ขึ้นมา 2 ตัวคือ DataReader และ DataWriter [gist id="f702eba2cea3970f917b30f5eacff07a" file="3.swift"] จากนั้นทำการแก้ไข struct/class ที่ทำการ implement protocol เดิมดังนี้ [gist id="f702eba2cea3970f917b30f5eacff07a" file="4.swift"]

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

แต่สิ่งที่น่าสนใจคือ ถ้ามี protocol จำนวนเยอะ ๆ ละ ชีวิตไม่น่าจะดีเท่าไร ดังนั้นใน swift นั้นมี typealias ให้ใช้ ทำให้ code อ่านง่ายขึ้นดังนี้ [gist id="f702eba2cea3970f917b30f5eacff07a" file="5.swift"]

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

สิ่งที่นักพัฒนาควรต้องทำคือ การปรับปรุง code ต่าง ๆ ให้ดีขึ้นอยู่อย่างเสมอ แล้วชีวิตจะดีขึ้นครับ ขอให้สนุกกับการ coding ครับ Reference Websites https://dzone.com/articles/protocol-composition-in-swift?edition=334920

Viewing all articles
Browse latest Browse all 1997

Trending Articles