2008-09-24 17 views

Trả lời

4

mô phỏng AOP mô hình AOP thông qua móc, về cơ bản cho phép các nhà phát triển dệt thành từng bit trong suốt quá trình thực thi. bạn có thể xem xét các móc mà nhà phát triển có thể triển khai here.

làm ví dụ nhanh, nếu tôi đang phát triển mô-đun dựa trên nút mới (nút là dạng dữ liệu cơ bản trong drupal), tôi có quyền truy cập tức thì vào nhận xét và phân loại mà không có thêm công việc nào. các mô-đun bình luận và phân loại có khả năng nối vào các nút và cung cấp chức năng được thêm vào đó. vì vậy trong ý nghĩa đó tôi không phải tính đến các tính năng như vậy trong chương trình của mình nhưng tôi có thể tận dụng sự linh hoạt đó.

1

Drupal là một "mô hình đa" khuôn khổ, và chỉ có một số bit của nó thực hiện "một loại" AOP:

  • Drupal 7 làm function(), ví dụ, chuyển đổi một tập hợp các mảng lồng nhau vào HTML đầu ra bằng cách chọn các mẫu thích hợp dựa trên các quy tắc ưu tiên cơ bản: theo cách này, Drupal hoạt động rất giống với công cụ biến đổi XSLT, trong đó các tệp mẫu của chủ đề được tạo cùng nhau tạo thành tệp .xsl đầu vào và tổ mảng đầu vào là ban đầu. tệp xml. Điều này có nghĩa rằng có một cái gì đó thanh lịch chức năng theo cách mà chủ đề làm việc.
  • Ngoài ra, lớp trừu tượng cơ sở dữ liệu D7 gần với hướng đối tượng "thẳng", mặc dù là ghi chú của Larry (xem sau), có một lượng nhỏ AOP gần như trong lớp OO này.

Mô hình AOP của Drupal có thể được trực quan hóa tốt hơn theo hướng sự kiện và tất cả đều xảy ra thông qua khái niệm móc của Drupal. Ví dụ, khi bạn làm như sau:

  • viết một module gọi là mymodule
  • trong mymodule.module, tạo một hàm gọi là mymodule_init()
  • phép module này trong Drupal

những gì bạn đang tuyên bố là, trong mã giả:

subscribe mymodule to "hook events" of type init 

Khi lõi của Drupal sau đó chạy module_invoke_all('init') (gọi _drupal_bootstrap_full()-code available here) đây là Drupal nói

notify all subscribers to "hook events" of type init that this has occurred 
by passing any relevant arguments to them 
and letting them run the code they define in their hook_init() 

Vì vậy, trong khi PHP vẫn là một ngôn ngữ thủ tục - và mymodule_init() của bạn có thể làm tất cả các loại điên, mọi thứ unencapsulated nếu bạn thực sự muốn - Drupal vẫn chịu trách nhiệm . Drupal trong một ý nghĩa quyết định có hay không gọi mã của bạn ở nơi đầu tiên.

Bằng cách này, Drupal là có thể biến các giai đoạn thực hiện riêng của mình vào bán AOP, bằng cách định nghĩa điểm chung (các module_invoke*() chức năng) và cho phép bạn viết riêng pointcuts bạn (chức năng mymodule_*() của bạn. Mà đặt tên quy ước phải khớp với tên móc của Drupal.)

Để biết thêm thông tin về điều này và bản chất đa mô hình của Drupal, hãy thử Larry Garfield's excellent blogpost.

Các vấn đề liên quan