Các khái niệm AOP được giải thích cho hình nộm


19

Ai đó có thể giải thích các khái niệm AOP cho người giả: tham gia điểm, cắt điểm, dệt v.v.

Ví dụ: Aspect: mô đun hóa mối quan tâm cắt giảm trên nhiều lớp. Điều đó nghĩa là gì?

Câu trả lời:


15

Hãy nghĩ về một mối quan tâm như một nhóm chức năng, ví dụ như đăng nhập, kiểm toán, bảo mật

Các chức năng này đã từng có mặt trong hầu hết các mã, nhưng chúng không thực sự sống trong các lớp động vật của chúng ta -> chúng là các chức năng nên sống trong nhiều lớp - chúng là mối quan tâm xuyên suốt .

  • Điểm tham gia là một vị trí trong mã nơi mã khía cạnh thực sự được chạy.

  • Một điểm cắt là làm thế nào để nói mã nào chạy ở điểm nối.

  • Dệt - là khi trình biên dịch / hệ thống lấy mã thông thường của bạn và bao gồm tất cả mã AOP để nó kích hoạt mã chính xác, v.v. - có thể coi đây là một bước biên dịch bổ sung.

Một ví dụ đơn giản dễ hiểu là:

  1. Chúng tôi muốn theo dõi tất cả các cuộc gọi phương thức cho mục đích gỡ lỗi (nghĩa là chúng tôi muốn xem phương thức nào được gọi theo thứ tự nào).
  2. Chúng ta tạo một khía cạnh ghi lại tên của phương thức khi nó được gọi
  3. Chúng tôi tạo các điểm cắt liên kết khía cạnh với tất cả các phương thức trong mã. Trong hầu hết các khung AOP, bạn có thể thực hiện điều này một cách dễ dàng với một số thẻ hoang dã
  4. Bây giờ chúng tôi đã đăng nhập của mọi phương thức từng được gọi.

Xin lưu ý rằng thuật ngữ này hơi khác nhau giữa các triển khai và khung AOP khác nhau.


Giống như tôi đang viết câu trả lời dài dòng của mình! Của bạn ngắn gọn hơn, tôi thích nó. Sẽ chỉnh sửa nó một chút cho rõ ràng.
Martijn Verburg

Cảm ơn, tôi nên học các quy tắc định dạng, tiếp tục quên.
Jonno

Có vẻ như điều này sẽ đơn giản để thực hiện với các trình trang trí Python hoặc macro Lisp- Y / N?
Paul Nathan

@Paul - không quen thuộc với bất kỳ cấu trúc nào mà bạn đề cập Tôi sợ và một google nhanh chóng không cung cấp cho tôi đủ thông tin chi tiết để trả lời.
Jonno

@PaulNathan: AOP khá đơn giản trong các ngôn ngữ động. Một khung AOP đơn giản có thể được tạo ra vào một buổi chiều. Trong các ngôn ngữ được biên dịch như cuộc sống Java không quá ngọt ngào.
kevin cline

-1

Đọc theo trình tự

Mỗi định nghĩa được xây dựng trên những cái trước đó.

Mối quan tâm xuyên suốt

Một cái gì đó làm phiền bạn (quan tâm) ở mọi nơi (xuyên suốt) trên ứng dụng của bạn. ví dụ: đăng nhập hoặc bảo mật

Khía cạnh

Một đoạn mã được tự động thêm trước , sau hoặc cả hai ( xung quanh ) mã hiện tại của bạn

PointCut & Tham gia

                  Application code
                           |
                           |
                           |
                           |
                          \|/
                           |
JoinPoint  ----------->("before" aspect, on the way in)  // just before your intercepted application code
Pointcut start--------> public String myMethod(params ...)
                   //your application code
Pointcut finish--------> return (foo)
JoinPoint  ----------->("after" aspect, on the way out)  // just after your intercepted application code
                           |
                          \|/
                           |
                           |
                           |
                  Application code

Mũi nhọn

Một nơi trong thực thi mã trong đó một phần của khía cạnh thực thi.

Tham gia

Điểm mà khía cạnh của bạn "tham gia" điểm cắt. Tại tham gia "trước", bạn sẽ có quyền truy cập vào các tham số, tại "sau" tham gia, bạn sẽ có quyền truy cập vào giá trị trả về. Nếu một ngoại lệ được ném ra, bạn có thể cần một "thử bắt cuối cùng" để xử lý hoặc ném lại nó.

Dệt

Quá trình thêm các khía cạnh xung quanh một điểm cắt


Bất cứ ai bỏ phiếu trả lời của tôi, xin vui lòng để lại nhận xét tại sao - nếu bạn không phiền. Tôi hứa tôi sẽ không bắt đầu một cuộc tranh cãi về nó. Tuy nhiên, tôi muốn biết những gì tôi có thể làm tốt hơn. Cảm ơn bạn!
Prashant
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.