วันศุกร์ที่ 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 ของมันดีจริงๆ"



วันพฤหัสบดีที่ 6 เมษายน พ.ศ. 2560

โปรเจคบ้านเลขที่ 45 : Mini Review ประตูกันน้ำ Parozzo (Water Proof Test)


User Review "กันน้ำ กันปลวก กันความชื้น PAROZZO"


บ้านยังไม่เสร็จ(สักที) ก็หาเรื่องเขียน blog กันไป วันนี้พามาดูประตูครับ

ด้วยความที่อยากได้ประตูสวยๆ มีคุณสมบัติ ประมาณนี้

  • ดูแล้วเหมือนประตูไม้ 
  • กันน้ำ
  • กันปลวก
  • แข็งแรงทนทาน
  • ราคาไม่แพง
ดูแล้วความต้องการเยอะพอสมควรเลย 55+ ซึ่งถ้าถามว่าทำไมไม่ใช้ประตูไม้ไปเลยนะ ก็ไม้มันไม่กันปลวก กับทนน้ำนี้นา ใช้ในห้องน้ำไม่ได้

หลังจากหาข้อมูลประตูอยู่นาน ก็พบว่าวัสดุที่ใช้ทำประตูนี้มีอยู่เยอะเหมือนกันแหะ ไม่ว่าจะเป็น PVC , MDF , HDF , UPVC , WPC

ซึ่งแต่ละอย่างก็มีข้อดีข้อเสียต่างกัน แต่ด้วยโจทย์ คือ ต้องใช้ในห้องน้ำได้ด้วย เพราะฉะนั้น จึงเหลือแค่
PVC ,  uPVC และ WPC

แต่หลังจากที่ได้ไปเห็นของจริงตาม HomePro , ไทวัสดุ และงานสถาปนิก 59 เรื่องความเหมือนไม้จริงต้องยกให้ uPVC กับ WPC

หลังจากนั้นมาดูเรื่องราคาแล้ว  "ส่วนใหญ่ WPC จะแพงกว่า UPVC" พอประมาณเลย 

หาข้อมูลอยู่ พักใหญ่ๆ ก็มีผู้ผลิตประตู  UPVC เข้าตาอยู่ 2 เจ้าคือ PAROZZO กับ ECO DOOR

วันอาทิตย์ที่ 2 เมษายน พ.ศ. 2560

โปรเจคบ้านเลขที่ 45 : ตอนที่ 16 งานฝ้าเชิงชายภายนอก ตอนที่ 1


ห่างเหิน แต่มิห่างหาย มาอัพเดตกันต่อหลังจากหายไปนาน อิอิ

มาต่อกันที่งานฝ้าของบ้านเลขที่ 45 กันเถอะ


ในที่สุดหลังจาก ผรม. ทำการฉาบภายนอกครบทุกด้านก็ถึงเวลาของ งานฝ้า สักที

ซึ่งงานฝ้านี้ผมได้ ผรม. อีกทีมนึงเข้ามาทำ ซึ่งช่างแต่ละด้านก็มีความถนัดแตกต่างกันไป ช่างปูน กับ ช่างฝ้าก็เช่นกัน ผรม. บ้างคนอาจจะบอกเราว่าทำได้หมด แต่ทำได้ กับทำออกมาแล้วดีมันต่างกัน

เพราะฉะนั้น หากใครกำลังสร้างบ้านแล้ว ผรม. บอกทำเองได้หมดได้หมดโดยไม่มีช่างเฉพาะทางเขามาทำ บอกได้เลยถ้าไม่เละ ก็ต้องบอกเลยว่าเทพมาก !!!

เข้าเรื่องมาต่อกันที่งานฝ้า ผรม. ช่างฝ้าเข้ามาดูหน้างาน ก็คุยรายละเอียดกัน ได้ความว่า ผรม. งานฝ้านี้รับทำให้บ้านโครงการดังๆ เช่น SANSIRI, HABITIA ซึ่งดูแล้วน่าจะไว้ใจได้เลยทีเดียว โดยช่างชุดนี้จะทำทั้งฝ้าภายในและภายนอก