Thực hiện theo các nguyên tắc Information Expert trong hướng dẫn GRASP cho thiết kế hướng đối tượng:
... đặt một trách nhiệm trong lớp học với các thông tin mới nhất cần thiết để hoàn thành nó.
Vì vậy, bạn sẽ ghi vào nhật ký từ lớp chứa dữ liệu bạn cần đăng nhập. Nếu sự kiện bạn muốn đăng nhập liên quan đến công việc của mô hình, sau đó ghi vào nhật ký trong mô hình. Nếu sự kiện muốn đăng nhập liên quan đến công việc của bộ điều khiển, sau đó ghi vào nhật ký trong bộ điều khiển.
Tạo một đầu ra nhật ký cho một ứng dụng. Nếu không, bạn sẽ phải truy tìm nhiều tệp nhật ký để tìm bất kỳ thông tin chẩn đoán nào! Bạn có thể lưu trữ đối tượng nhật ký trong Zend_Registry
để bạn có thể gọi nhật ký từ bất kỳ lớp nào trong ứng dụng của mình.
Re bình luận của bạn:
Tốt hơn để chỉ thất bại một cách duyên dáng nếu logger không được tìm thấy dưới khóa registry dự kiến. Bởi thất bại duyên dáng tôi có nghĩa là một trong hai đầu ra một lỗi để stdout (đến trang web) hoặc stderr (để đăng nhập máy chủ httpd), hoặc ném một ngoại lệ và để cho các ứng dụng xử lý nó.
Đối với phụ thuộc, đây không phải là vấn đề. Bất cứ khi nào một lớp sử dụng một lớp khác, bạn có một loại phụ thuộc tương tự. Xem mẫu thiết kế Registry.
Nguồn
2010-05-26 07:39:30
Nhưng với trình ghi nhật ký được lấy từ sổ đăng ký, mô hình có phụ thuộc "ẩn" mới. Nếu tôi sử dụng mô hình trong một ứng dụng khác - có lẽ không cần đăng nhập hoặc lưu trữ dưới một khóa khác - sau đó cố gắng để có được trình ghi nhật ký sẽ không thành công. Vì vậy, tất cả các mô hình của tôi nên phân lớp một mô hình cơ sở có chứa các phương thức như log(), setLogger(), getLogger()? Hay chỉ là quá mức cần thiết? –
Rất hữu ích, cảm ơn rất nhiều. ;-) –