Làm cách nào để bạn tổ chức và quản lý các đối tượng trợ giúp của mình như công cụ cơ sở dữ liệu, thông báo người dùng, xử lý lỗi, v.v. trong một dự án hướng đối tượng dựa trên PHP?
Giả sử tôi có một CMS PHP lớn. CMS được tổ chức theo nhiều lớp khác nhau. Một vài ví dụ:
- đối tượng cơ sở dữ liệu
- quản lý người dùng
- một API để tạo / sửa đổi / xóa các mục
- một đối tượng nhắn tin để hiển thị tin nhắn cho người dùng cuối
- một trình xử lý ngữ cảnh đưa bạn đến đúng trang
- một lớp thanh điều hướng hiển thị các nút
- một đối tượng ghi nhật ký
- có thể, xử lý lỗi tùy chỉnh
Vân vân.
Tôi đang giải quyết một câu hỏi muôn thuở, làm thế nào để làm cho các đối tượng này có thể truy cập tốt nhất đến từng phần của hệ thống cần nó.
ứng dụng đầu tiên của tôi, nhiều năm trước là có $ application global chứa các phiên bản khởi tạo của các lớp này.
global $application;
$application->messageHandler->addMessage("Item successfully inserted");
Sau đó, tôi đã thay đổi sang mẫu Singleton và một hàm nhà máy:
$mh =&factory("messageHandler");
$mh->addMessage("Item successfully inserted");
nhưng tôi cũng không hài lòng với điều đó. Các bài kiểm tra đơn vị và tính đóng gói ngày càng trở nên quan trọng hơn đối với tôi, và theo hiểu biết của tôi, logic đằng sau các khối cầu / hạt đơn đã phá hủy ý tưởng cơ bản về OOP.
Sau đó, tất nhiên có khả năng cung cấp cho mỗi đối tượng một số con trỏ đến các đối tượng trợ giúp mà nó cần, có thể là cách sạch nhất, tiết kiệm tài nguyên và thân thiện với thử nghiệm nhưng tôi nghi ngờ về khả năng duy trì của điều này trong thời gian dài.
Hầu hết các khuôn khổ PHP mà tôi đã xem xét đều sử dụng mô hình singleton hoặc các hàm truy cập các đối tượng được khởi tạo. Cả hai cách tiếp cận tốt, nhưng như tôi đã nói, tôi hài lòng với cả hai.
Tôi muốn mở rộng chân trời của mình về những mẫu phổ biến tồn tại ở đây. Tôi đang tìm kiếm các ví dụ, ý tưởng bổ sung và các gợi ý hướng tới các nguồn thảo luận về vấn đề này từ quan điểm dài hạn , trong thế giới thực .
Ngoài ra, tôi muốn nghe về cách tiếp cận chuyên biệt, thích hợp hoặc đơn giản là kỳ lạ đối với vấn đề.
$mh=&factory("messageHandler");
là vô nghĩa và không mang lại bất kỳ lợi ích hiệu suất nào. Ngoài ra, điều này không được chấp nhận trong 5.3.