สมมติว่าเมื่อใดก็ตามที่ฉันดำเนินการ CRUD หรือแก้ไขความสัมพันธ์ในลักษณะเฉพาะฉันก็ต้องการทำอย่างอื่นด้วย เช่นเมื่อใดก็ตามที่มีคนเผยแพร่โพสต์ฉันก็ต้องการบันทึกบางสิ่งลงในตารางเพื่อการวิเคราะห์ อาจไม่ใช่ตัวอย่างที่ดีที่สุด แต่โดยทั่วไปมีฟังก์ชัน "จัดกลุ่ม" จำนวนมากนี้
ปกติฉันจะเห็นตรรกะประเภทนี้ใส่ไว้ในคอนโทรลเลอร์ ทั้งหมดนี้เป็นสิ่งที่ดีจนคุณต้องการสร้างฟังก์ชันนี้ซ้ำในหลาย ๆ ที่ เมื่อคุณเริ่มเข้าสู่บางส่วนการสร้าง API และสร้างเนื้อหาจำลองจะกลายเป็นปัญหาในการทำให้สิ่งต่างๆแห้ง
วิธีที่ฉันเห็นในการจัดการสิ่งนี้ ได้แก่ เหตุการณ์ที่เก็บไลบรารีและการเพิ่มลงในโมเดล นี่คือความเข้าใจของฉันเกี่ยวกับแต่ละข้อ:
บริการ:นี่คือที่ที่คนส่วนใหญ่อาจจะใส่รหัสนี้ ปัญหาหลักของฉันเกี่ยวกับบริการคือบางครั้งมันก็ยากที่จะพบฟังก์ชันเฉพาะในนั้นและฉันรู้สึกว่าพวกเขาลืมไปว่าเมื่อใดที่ผู้คนให้ความสำคัญกับการใช้ Eloquent ฉันจะรู้ว่าฉันต้องเรียกวิธีการpublishPost()
ในห้องสมุดเมื่อฉันก็สามารถทำ$post->is_published = 1
?
เงื่อนไขเดียวที่ฉันเห็นว่าใช้งานได้ดีคือถ้าคุณใช้บริการเท่านั้น (และเป็นการดีที่จะทำให้ Eloquent ไม่สามารถเข้าถึงได้จากคอนโทรลเลอร์ทั้งหมดด้วยกัน)
ในที่สุดดูเหมือนว่านี่จะเป็นการสร้างไฟล์ที่ไม่จำเป็นจำนวนมากหากโดยทั่วไปคำขอของคุณเป็นไปตามโครงสร้างแบบจำลองของคุณ
ที่เก็บ:จากสิ่งที่ฉันเข้าใจว่านี่เป็นเหมือนบริการ แต่มีอินเทอร์เฟซเพื่อให้คุณสามารถสลับไปมาระหว่าง ORM ซึ่งฉันไม่ต้องการ
เหตุการณ์:ฉันเห็นว่านี่เป็นระบบที่สง่างามที่สุดในแง่หนึ่งเพราะคุณรู้ว่าเหตุการณ์แบบจำลองของคุณมักจะถูกเรียกใช้วิธีการ Eloquent ดังนั้นคุณจึงสามารถเขียนคอนโทรลเลอร์ของคุณได้ตามปกติ ฉันเห็นว่าสิ่งเหล่านี้ยุ่งเหยิงและถ้าใครมีตัวอย่างของโครงการขนาดใหญ่ที่ใช้เหตุการณ์สำหรับการมีเพศสัมพันธ์ที่สำคัญฉันก็อยากดู
โมเดล:ตามเนื้อผ้าฉันมีคลาสที่ทำ CRUD และจัดการการมีเพศสัมพันธ์ที่สำคัญด้วย สิ่งนี้ทำให้ง่ายขึ้นจริง ๆ เพราะคุณรู้ฟังก์ชันการทำงานทั้งหมดรอบ ๆ CRUD + สิ่งที่ต้องทำก็อยู่ที่นั่น
เรียบง่าย แต่ในสถาปัตยกรรม MVC นี่ไม่ใช่สิ่งที่ฉันเห็นโดยปกติ ในแง่หนึ่งฉันชอบบริการนี้มากกว่าเพราะมันหาง่ายกว่าและมีไฟล์ให้ติดตามน้อยกว่า มันอาจจะไม่เป็นระเบียบสักหน่อย ฉันต้องการทราบความล้มเหลวของวิธีนี้และทำไมคนส่วนใหญ่ถึงไม่ทำ
ข้อดี / ข้อเสียของแต่ละวิธีคืออะไร? ฉันพลาดอะไรไปรึเปล่า?