วันศุกร์ที่ 7 เมษายน พ.ศ. 2560

SWIFT CLEAN ARCHITECTURE : มารู้จักกับ VIPER กันแถอะ


SWIFT CLEAN ARCHITECTURE : มารู้จักกับ VIPER กันแถอะ


อะแฮ่มๆ ตั้งแต่เรียนจบทำงานเป็น โปรแกรมมั่ว เอย โปรแกรมเมอร์ มาเกือบ 10 ปี

เขียนมาก็หลายภาษาไม่ว่าจะเป็น C++, C#, JAVA, PHP, .NET, VB, NodeJS, Obj-C, Swift

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

เกริ่นเพิ่มเติมอีกนิดตัวผม เป็น iOS Programmer นะครับ เพราะฉะนั้นบทความที่เขียนนี้เกียวกับ iOS Programming แน่นอน

จนกระทั่งในวันนึงก็เจอเรื่องที่สนใ และอยากเขียนขึ้นมาซะที แถมยังมีคนเขียนเอาไว้น้อยอีกด้วย
พิมพ์มาตั้งนาน เรื่องที่อยากจะแชร์ให้ iOS Programmer ได้รู้จักและได้ลองกัน คือ

"VIPER" เพราะผมลองแล้วมันดีมากๆ จนต้องมาเล่าสู่กันฟัง

มารู้จัก iOS Archiecture Pattern กันก่อน

ไม่ว่าจะโปรแกรมมิ่งภาษาอะไรก็ตามมักจะรูปแบบ หรือแบบแผนในการเขียนโปรแกรมสำหรับ iOS ก็เช่นกัน โดยรูปแบบที่ทุกคนคุ้นเคยและมักจะใช้เป็นจุดเริ่มต้นคือ MVC นอกจากนั้นก็ยังมี MVP, MVVM และ VIPER

สำหรับ MVC (Model-View-Controller) คงไม่ต้องอธิบายอะไรมาก เพราะทุกภาษาแทบจะใช้ Pattern นี้กันหมดอยู่แล้ว Apple เองก็ออกแบบพื้นฐานการเขียนโปรแกรมบน iOS ด้วยรูปแบบนี้

แต่ !!! MVC ของ Apple จะเป็น M+VC หากนึกไม่ออกลองนึกถึง "ViewController" ดูที่ View กับ Controller อยู่ในไฟล์เดียวกัน

ต่อมา MVP (Model-View-Presenter) คือ Pattern ที่พัฒนาต่อยอดมาจาก MVC โดยใช้หลักการแยก View กับ Controller ให้ชัดเจน โดยเปลี่ยน Controller เป็น Presenter
โดย Presenter มีหน้าที่คอยอัพเดต View และทำหน้าที่จัดการด้านการคำนวน Business Logic





สุดท้ายแต่ไม่ท้ายสุด MVVM (Model-View-ViewModel) เป็น Pattern อีกรูปแบบนึงที่ต่อยอดมาจาก MVC เช่นกัน โดยเปลี่ยน C เป็น VM



 ดูผิวเผิน MVVM จะคล้ายๆ กับ MVP แต่จริงๆ แล้ว MVVM คล้ายกับ MVC มากกว่า โดยดูได้จากรูปด้านล่างนี้



จะเห็นว่า VC ยังอยู่เหมือนเดิม แต่ที่เพิ่มเติมคือมี ViewModel มาทำหน้าที่เป็นตัวจัดการ Presentation Logic แทน Controller ซึ่งข้อดีหลักๆ ของ MVVM ก็คือ เราสามารถเปลี่ยนจาก MVC เป็น MVVM ได้โดยการเพิ่ม ViewModel เข้ามาซึ่ง ViewModel นี้ก็คือ Object ธรรมดานี้เอง

สุดท้ายพระเอกของงาน VIPER (View-Interactor-Presenter-Entry-Router)
เจ้า VIPER นี้เป็นอะไนที่ Breaking the habit มาก ให้ลืมภาพรูปแบบ Pattern เดิมๆ

แล้ว MVC ไม่ดียังไง ?

จากที่บอกข้างต้นว่า MVC สไตล์ Apple มันไม่ได้แยกออกมาเป็น M-V-C แต่มันเป็น M+VC ทำให้แทนที่จะแยก Business Login ออกจาก View โดยเด็ดขาดก็ไม่สามารถทำได้ แถมพอเขียนอะไรที่ซับซ้อนขึ้น เยอะขึ้นก็กลายเป็น Massive+ViewController ไปซะอีก




VIPER คืออะไร

VIPER ไม่ใช้ ภาษาใหม่แต่เป็นแบบแผน(Pattern) หรือหลักการพัฒนา Application แบบนึงของ iOS

โดยหลักการของ VIPER คือให้มองทุกอย่างเป็น LEGO ชิ้นนึง และโมดุลแต่ละโมดุลก็คือการนำเอา LEGO หลายๆ ตัวมาต่อเข้าด้วยกัน และทั้ง Application ก็ประกอบด้วยโมดุลหลายๆ โมดุลอีกที

โดยใน 1 Module ของ VIPER จะประกอบไปด้วย (View-Interactor-Presentor-Entry-Router) ซึ่งจะเห็นได้ว่า 1 ในโมดุลของ VIPER นั้นแบ่งทุกอย่างออกไปได้ละเอียดมาก แยกย่อยกว่า MVP หรือ MVVM ซะอีก

จะเห็นว่าการแยกย่อยของ VIPER นั้นถึงจะซอยออกมาเยอะ แต่... แต่ละส่วน แต่ละไฟล์ที่แยกออกมานั้นมีหน้าที่ของตัวเอง มีบทบาทของตัวเองอย่างชัดเจน ตรงนี้เองทำให้เวลาเราไล่โค๊ดก็จะไล่ง่ายขึ้นด้วย ไม่ต้องไปหาในไฟล์ใหญ่ๆ ที่มีโค๊ดเป็น 1000 บรรทัด เพียงเพื่อจะเปลี่ยนข้อความใน label แค่คำเดียว



โดยหลักการ VIPER ไม่ได้กำหนดว่า LEGO แต่ละชิ้นจะเล็ก หรือจะใหญ่แค่ไหน ให้คนเขียนโค๊ดดีไซน์เองเลยว่าพอใจแบบไหน ถ้าซาดิสต์มากก็แบ่ง LEGO ออกเป็นชิ้นเล็กๆ ละเอียดๆ ได้เลย ซึ่งบางโมดุลที่ทำงานไม่ซับซ้อนเราก็อาจจะทำ LEGO ชิ้นใหญ่เพียงชิ้นเดียวก็ได้ไม่มีข้อบังคับตายตัว

หากอ่านถึงตรงนี้แล้วเริ่มสนใจ VIPER แล้วไปตามต่อตอนที่ 2 ที่ Link ข้างล่างได้เลย

คลิกตรงนี้เลย "SWIFT CLEAN ARCHITECTURE : เริ่มติดใจ VIPER ของมันดีจริงๆ"



ไม่มีความคิดเห็น:

แสดงความคิดเห็น