มาดูโครงสร้างที่ผมได้ 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} นี่เด่นเลยครับ
0 ความคิดเห็น:
แสดงความคิดเห็น