[Laravel loc Dependency Injection Step by Step]

ก่อนหน้านี้ได้เขียนเรืองของการติดตั้ง laravel ไปแล้ว แต่ขอข้าม shot ไปที่การทำ Inversion of Control Containers(IoC)  ต้องออกตัวก่อนว่าอาจจะผิด ทฤษฏีหรือไม่ถูกต้องประการใด ขออภัยมา ณที่นี้
มาดูโครงสร้างที่ผมได้ implement step ของ project คร่าว ๆครับ

ไลบารี่ที่เลือกมาใช้คือ prettus  เป็นความสะดวกสะบายเป็นอย่างยิ่งในการ implement  สำหรับการติดตั้งผมคงไม่กล่าวถึงเพราะมีอธิบายไว้เรียบร้อยใน doc ของ prettus แต่ขอ ยกการใช้งาน loc ของ app นี้ครับ

เริ่มกันเลย หากยังไม่ได้ทำการติดตั้ง prettus repo ก็ให้ทำให้เรียบร้อยซะ เสร็ดแล้ว ก็มาทำการสร้าง repository ของเราเอง ด้วยคำสั่ง php artisan make:repository Post 



หากทำสำเร็จก็ขึ้นข้อความเหมือนที่เห็นครับ แต่หากทำไปแล้วมีข้อความ error ท่านต้องแน่ใจว่าท่านทำสิ่งนี้หรือยัง 
config file app.php ถูกต้องหรือไม่ 
command php artisan vendor:publish
composer update หรือยัง 
ถ้าทำครบแล้วก็ต้องได้แน่นอนครับ 

หลังจากนั้นเราจได้ไฟล์ Repository มาเรียบร้อยแล้วครับ ทั้ง interface Entities และไฟล์อื่น ๆที่เกี่ยวข้อง ร้สึกว่าจะมี message ถามเราว่าจะสร้างอันอื่นด้วยไหม พวก tranform  criterias พวกนี้ 

คำถาม Repository เอาไว้ทำอะไร หากมองในมุม Design pettern มันจะเป็น facetory ดี ๆนี้เองครับจัดการ กับ business logic ทุกอย่างเอามารวมไว้ที่นี้ 

คำถาม จะเขียน validate ตอนไหน จริง ๆ นี่ validate ของ laravel จะโดน autoload มาตั้งแต่ kernal แล้วครับ ซึ่งเป็น creataion design เราสามารถเรียกได้อีกอย่างว่า facades design ก็ได้ . ทำให้ตัว validate เอง ค่อนข้างจะยืดหยุ่น เขียนได้ทุกที่จริง ๆ น่ะ เพียงแค่ call เบา ๆ ไปว่า \Validator::make();
เท่านี้ก็สามารถ create rules ได้ทุกที่ part ต่อไปจะเขียนเรื่อง validator แบบเจาะลึกครับ 

คำถาม ส่วนไหนจะเรียกใช้ Repository บาง เอาจริง ๆ Repository เป็น factory คือเรียกที่ไหนก็ไม่ผิด ด้วยความยืดหยุ่นของมันเอง แต่โดย รูปแบบตัว controllers จะเป็นตัวใช้งานมันครับ โดยการ use; interface ที่ถูก bind repository เข้าไป โดยอาศัย service provider

คำถาม models จัดการข้อมูลใช่ไหม คือใช่ครับ แต่ตัว repository ได้สืบทอดตัวนี้มาเรียบร้อยแล้วด้วย แล้วแต่จะเขียน จะเอา data handle ไป ไว้ที่ entities หรือ กระทำตรงนั้นก็ได้ แต่เพื่อนผมบอกว่า หากเป็นการ query ต้องไปไว้ที่ model เพียงอย่างเดียว เพื่อ ให้ที่อื่นได้ใช้ได้ง่ายด้วย และเหมาะกับการเขียน test case 

คำถาม transformer คือไร มันคือ interface ตัวหนึ่งไว้ convert data ก่อนที่จะทำกับ data ในเรื่องของ logic ,mechanism ก็สุดแท้แต่เราจะเขียนอะไรให้มันแต่ก้มี pattern ที่บังครับ method ทีต้องมีครับ 

คำถาม criterias มีประโยชน์อย่างไร ชือมันก็สื่ออยู่แล้วครับว่า กฏเกณฑ์ ข้อบังครับที่เราจะใช้งาน อันนี้ยิ่งเราเขียนแยก กฏได้เยอะเท่าไหร่ โปรแกรมของเราก็ยืดหยุ่นมากแค่นั้น แต่บางทีหากโปรเจ็คเล็ก ๆ ก็ไม่ต้องเขียนก็ได้ แล้วแต่ ? แล้วเอาไปใช้ที่ไหน ? ที่ repository นั้น เอง จัดการ criterias query ของ data ครับ ส่วนวิธีการใช้งานมีอยู่ใน doc แล้วผมจะมาเขียนวิธีการใช้งานอีกทีหนึ่ง

คำถาม typing hiting นี่คืออะไร แนะนำให้ search google เจอเยอะมาก พูดแบบบ้าน ๆคือ เป็นการสร้าง instance object ตั้งแต่ method นั้นโดย call เลยครับ แต่ต้องเอาไว้หลัง paramiters น่ะครับ (เผื่อมี)

-----------------------------------------------------------------------------------

เอาล่ะครับมาดู ส่วนการ bind ก่อนอื่นต้องสร้าง serviceprovider ของเรามาก่อนครับ แล้วไปแก้ที่ฟังก์ชัน register() 
command: php artisan make:serviceprovider nameProvider




ส่วน code ก็แก้ไขนิดเดียวครับ 

ส่วนการเรียกใช้งาน ก็เพิ่มหลัง name space ของ controller
user  App\Repositories\Interfaces\V2\SimpleRepositoryInterface as Repository;

/** typint hintting ครับ 
public function createSamark(int $param, Repository $repository) {}

จากนนี้ controllers ของเราก็สามารถ เรียก ใช้ public function ของ repository ของเราได้แล้วครับ โดยผ่านทาง interface จะสังเกตเห็นว่าเราไม่ได้เรียกใช้มันตรง ๆ ข้อดีข้อเสีย ก็มีครับ แต่ผมไม่เขียน

จบกันไปอีกบทหากยังงงๆ ก็จงลองทำและอ่านเยอะ ๆครับ เดี๋ยวก็เข้าใจเอง part ต่อไป ก็มีเรื่อง validator, route, request handle ,aut ,{Facade} นี่เด่นเลยครับ 






Share on Google Plus

About maxcom

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment
    Facebook Comment

0 ความคิดเห็น:

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