คุณจัดระเบียบและจัดการออบเจ็กต์ตัวช่วยของคุณเช่นเอ็นจิ้นฐานข้อมูลการแจ้งเตือนผู้ใช้การจัดการข้อผิดพลาดและอื่น ๆ ในโครงการเชิงวัตถุที่ใช้ PHP ได้อย่างไร
สมมติว่าฉันมี PHP CMS ขนาดใหญ่ CMS จัดอยู่ในชั้นเรียนต่างๆ ตัวอย่างบางส่วน:
- วัตถุฐานข้อมูล
- การจัดการผู้ใช้
- API เพื่อสร้าง / แก้ไข / ลบรายการ
- วัตถุส่งข้อความเพื่อแสดงข้อความไปยังผู้ใช้ปลายทาง
- ตัวจัดการบริบทที่นำคุณไปยังหน้าที่ถูกต้อง
- คลาสของแถบนำทางที่แสดงปุ่มต่างๆ
- วัตถุบันทึก
- อาจเป็นไปได้ว่าการจัดการข้อผิดพลาดแบบกำหนดเอง
เป็นต้น
ฉันกำลังเผชิญกับคำถามนิรันดร์วิธีทำให้วัตถุเหล่านี้สามารถเข้าถึงได้ดีที่สุดในแต่ละส่วนของระบบที่ต้องการ
apporach แรกของฉันเมื่อหลายปีก่อนคือการมี $ application global ที่มีอินสแตนซ์เริ่มต้นของคลาสเหล่านี้
global $application;
$application->messageHandler->addMessage("Item successfully inserted");
จากนั้นฉันเปลี่ยนเป็นรูปแบบ Singleton และฟังก์ชั่นโรงงาน:
$mh =&factory("messageHandler");
$mh->addMessage("Item successfully inserted");
แต่ฉันก็ไม่พอใจเช่นกัน การทดสอบหน่วยและการห่อหุ้มมีความสำคัญสำหรับฉันมากขึ้นเรื่อย ๆ และในความเข้าใจตรรกะที่อยู่เบื้องหลังลูกโลก / เสื้อกล้ามทำลายแนวคิดพื้นฐานของ OOP
แน่นอนว่ามีความเป็นไปได้ที่จะให้ตัวชี้แต่ละวัตถุแก่วัตถุตัวช่วยที่ต้องการซึ่งอาจเป็นวิธีที่สะอาดที่สุดประหยัดทรัพยากรและเป็นมิตรกับการทดสอบ แต่ฉันมีข้อสงสัยเกี่ยวกับความสามารถในการบำรุงรักษาของสิ่งนี้ในระยะยาว
เฟรมเวิร์ก PHP ส่วนใหญ่ที่ฉันดูจะใช้รูปแบบซิงเกิลตันหรือฟังก์ชันที่เข้าถึงอ็อบเจ็กต์ที่กำหนดค่าเริ่มต้น ทั้งสองวิธีที่ดี แต่อย่างที่บอกว่าฉันไม่มีความสุขกับทั้งสองอย่าง
ฉันต้องการขยายขอบเขตของฉันเกี่ยวกับรูปแบบทั่วไปที่มีอยู่ที่นี่ ฉันกำลังมองหาตัวอย่างความคิดเพิ่มเติมและคำแนะนำที่มีต่อทรัพยากรที่กล่าวถึงนี้จากในระยะยาว , โลกแห่งความจริงมุมมอง
นอกจากนี้ฉันสนใจที่จะได้ยินเกี่ยวกับวิธีการเฉพาะทางเฉพาะเจาะจงหรือวิธีการแปลก ๆสำหรับปัญหานี้
$mh=&factory("messageHandler");
ไม่มีจุดหมายและไม่ให้ประโยชน์ด้านประสิทธิภาพใด ๆ นอกจากนี้ยังเลิกใช้งานใน 5.3