Ai đó thường sẽ viết mọi thứ bạn đã thể hiện trong Bộ điều khiển Catalyst ::. Bây giờ bạn phải nhớ rằng một bộ điều khiển Catalyst tồn tại để thực hiện ánh xạ URL của bạn. Chắc chắn, có thể nhập rất nhiều chức năng vào bộ điều khiển, nhưng khi Catalyst tự nhập chức năng log
, bạn sử dụng chức năng này cho ánh xạ URL như thế nào?
Ví dụ sub log : Local { ... }
. Một thời gian ngắn sẽ không thể, hoặc nó sẽ phức tạp hơn sau đó nó nên được. Bộ điều khiển gần như không có chức năng nào, do đó bạn không cần phải nhớ nhiều chức năng và không có bất kỳ xung đột nào.
Đó cũng là lý do tại sao chính Perl chọn có các ký tự đặc biệt trong các biến đặc biệt. Giống như $/
, $_
, $]
và cứ tiếp tục như vậy. Chắc chắn họ cũng có thể sử dụng $INPUT_RECORD_SEPARATOR
hoặc $RS
làm mặc định, nhưng sau đó bạn cần biết chúng và có thể xung đột với mã của bạn nếu bạn không biết tất cả các biến đặc biệt.
Lý do khác là các tính năng bổ sung mà bạn gọi trên $c
có một số ngữ cảnh. Ví dụ: bạn có thể bật hoặc tắt ghi nhật ký với $c->log->disable('warn', 'error')
hoặc chỉ bật chúng. Ngữ cảnh này được truyền vào bộ điều khiển sâu hơn. Và họ không phải là toàn cầu, bạn có thể đặt chúng trên mọi yêu cầu đến một tiểu bang khác.
Một lý do khác là chức năng bổ sung mà bạn sử dụng có thể và đôi khi cần phải đọc tệp cấu hình hoặc những thứ khác. Sử dụng một đối tượng mà bạn truyền xung quanh cho mọi yêu cầu (Mỗi $c
là đặc biệt cho mọi yêu cầu) và có thể sửa đổi cho mọi yêu cầu cho phép mở rộng của bạn khả năng yêu cầu thông tin từ ứng dụng của bạn hoặc xử lý trạng thái cho một yêu cầu cụ thể.
Nhưng nếu bạn vẫn không muốn điều này, bạn không bị buộc phải sử dụng $c
. Ví dụ bạn chỉ có thể tải Log :: Log4Perl bằng tay, và sử dụng một cấu hình đặc biệt cho nó, và không sử dụng $c->log
ở tất cả. Hoặc bạn có thể nhập nhiều chức năng của chính mình. Nhưng tôi nghĩ rằng mặc định để không gây ô nhiễm không gian tên và cung cấp cho bạn khả năng để làm một cái gì đó đặc biệt cho mọi yêu cầu là một mặc định tốt.
Và ít nhất không có quy tắc nào bạn phải sử dụng $c
. Ví dụ, bản thân tôi sử dụng DateTime trực tiếp và tạo các đối tượng mới và không sử dụng Catalyst :: Plugin :: DateTime cho phép tôi làm $c->datetime
. Và tôi không thấy bất kỳ lợi ích của việc làm cuối cùng. Chỉ vì tồn tại rất nhiều plugin mở rộng $c
, không có nghĩa là chúng hữu ích hoặc bạn phải sử dụng chúng.
Nguồn
2011-06-20 10:56:08
nó không thực sự là một câu hỏi về cú pháp ... mặc dù tôi thích cách thức gọi của Rakudo ... – xenoterracide
@xenoterracide => bạn hỏi tại sao chất xúc tác bạn viết '$ c-> log-> cảnh báo (...) 'thay vì' log (warn => ...) '. Đó là một sự khác biệt về cú pháp. Lý do tại sao là bởi vì đó là những gì các tác giả của chất xúc tác nghĩ là tốt nhất. Vì vậy, tôi đã cho bạn một cách để viết nó theo cách bạn muốn (mặc dù trong trường hợp này, nó sẽ là 'Log() -> warn (...)' vì đó là cách thức hoạt động 'log' của chất xúc tác), loại câu trả lời là bạn mong đợi? –
hỏi thêm về lý do tại sao mọi thứ được thực hiện thông qua đối tượng ngữ cảnh, ngay cả những thứ bên ngoài được truy cập thông qua nó thường. chính xác lý do tại sao cú pháp rõ ràng hơn lý do tại sao nó thông qua đối tượng ngữ cảnh. trái với việc nói, chỉ cần sử dụng nhật ký api trực tiếp. – xenoterracide