Facade คืออะไร ? แปลตามตัวคือแปลว่าหน้าตึก งงป่ะล่ะจริง ๆแล้วมันเป็น Design pattern แบบหนึ่งครับที่รวบรวมเอา Function ต่างๆมาใช้งาน การทำงานของมันเมื่อเรียก Facade จะได้ New object ใหม่ทุกครั้ง Object คืออะไร คือกลุ่มของ คลาสที่ประกอบไปด้วย คุณสมบัติ (Properties) พฤติกรรม (behavior) Method หรือ Function เบื้องต้นน่ะครับลึก ๆ ลองไปค้นได้ใน Google จะมี แก๊งค์อ๊อฟโฟเป็นคนคิด
เอาล่ะมาเริ่มกันเลยดีกว่า ก่อนอื่นคุณต้องทำการติดตั้ง Laravel ซึ่งผมได้เขียนไว้ในบทความเก่าลองไปหาอ่านได้ครับ หากคุณมีพร้อมแล้วก็มาเริ่มกันเลย ปล.หลักใหญ่ใจความที่จะพูดถึงคือการสร้างและเรียกใช้งานอย่างง่าย ๆ เอาไปต่อยอดกันเองน่ะครับ
ภาพรวมก็ประมาณนี้ครับ คือเราไม่ได้ต้องเรียกใช้งาน Repository ตรง ๆ แต่เราจะเรียกผ่าน facade เราอีกทีหนึ่ง โดยอาศัยการผูก (Bind) ของ Serviceprovider ซึ่งจะทำให้เราเรียกใช้งานที่ไหนก็ได้มาดูตัวอย่างกัน
1.คือสร้าง Facade ขึ้นมาโดย Extends มาจาก Facade ของ kenel laravel ภายใน Folder App\Service หรือที่อื่น ๆก็ได้ตามสะดวกครับ แค่ชี้ name space ให้ถูกต้องก็เป็นอันพอ
2.เพิ่มที่ app.php ตรง aliases เพิ่ม บรรทัดนี้เข้าไป ข้างหน้าคือ Alias ชื่อเล่นที่เราจะเอาไว้ใช้เรียกครับตั้งอะไรก็ได้ แต่เพื่อให้สอดคล้องและการสื่อความหมาย ข้างหลังคือ Namspace ปลายทางของไฟล์ที่สร้างขึ้นในขั้นตอนที่ 1 ครับ
3. สร้าง Interface เพื่อเป็นแม่แบบของ Facade และ Repository เพื่อกำหนด Function ที่ควรจะมี
4.สร้าง Repository ขึ้นมา อย่าลืม function ที่กำหนดไว้ใน Interface ด้วยน่ะ ไม่งั้นคุณ Implement ไม่ผ่าน ตามที่บอกไว้ว่าตัวนี้จะจัดการ business logic ทั้งหมดครับ Repository ตัวนี้การสร้างและการทำงานผมเคยเขียนไว้แล้วในบทความเก่า ๆ ลองไปหากันได้ครับ
6.สร้าง Librarie อีกตัวขึ้นมาโดย implement interface ตัวเดียวกันที่สร้างไว้ใช้กับ Repository หลักใหญ่ใจความคือตัวนี้จะไป call Repo อีกทีแล้วส่งค่ากลับไปที่ Facade ครับ
7.ทำการ ผูก (bind) ด้วย servic provider ของ Laravel ครับจะเห็นว่าผม ผูก Librarie ในขั้นตอนที่ 6 เข้ากับ Interface ของหลาย ๆ ตัวซึ่งนั้นแหละครับเป็นที่มาของ Facade นั้นเอง สำคัญนิดหนึ่งครับ ต้องทำการ ผูก interface เข้ากับ Repository ทุกตัวก่อน นำไปผูกเข้ากับ Service หลักครับ
8. การเรียกใช้งาน คุณสามารถเรียกใช้งานที่ไหนก็ได้ครับทุก Function ที่ สร้างขึ้นมาใน service ข้อดีอีกอย่างคือ มันเรียก function ที่ไม่ใช่ static ได้ด้วยแบบ :: ดับเบิล คอลอน ทำให้มันกะชับยิ่งขึ้น ต่อไป Controller ของคุณก็จะสะอาดทำงานไม่กี่บรรทัด จะแก้ไขอะไรก็ไปทำ Repo ใหม่ เพื่อ Bind โดย Fucntion หลักก็ยังคงถูกบังคับด้วย Interface ทำงานได้ปรกติ
ข้อเสีย. ค่อยข้างเยอะครับเสียเวลาพอสมควร
debug ลำบากนิดหน่อย
ปล.ลองเอาไปทำตามกันดูครับติดขัดอะไรก็ลองมั่วดูน่ะ
0 ความคิดเห็น:
แสดงความคิดเห็น