2010-02-04 30 views
47

Tôi muốn tạo một bức tranh về những trường hợp có thể có cho sự tham gia hiệu quả của AOP trong thiết kế ứng dụng. Tất cả tôi đã gặp cho đến nay là:Trường hợp sử dụng AOP có thể là gì?

  • khai thác gỗ liên quan đến
  • kiểm tra an ninh
  • quản lý giao dịch
  • tinh chỉnh của một ứng dụng di sản

Bất cứ điều gì khác?

(Nó không phải là nhất thiết mùa xuân proxy dựa AOP - thay JBoss AOP.)

(Related question)

+1

"các trường hợp có thể"? Đó là bộ sưu tập gần như * vô tận *. Không phải tất cả là một ý tưởng tốt, tuy nhiên. Đặt tất cả là có thể. Có cách nào để thu hẹp hoặc tập trung câu hỏi đó không? –

+1

Đọc tốt: câu hỏi có chứa "các trường hợp có thể cho việc thực hiện AOP hiệu quả trong thiết kế ứng dụng". Bởi vì tôi có nghĩa là trường hợp đó là một ý tưởng tốt để sử dụng AOP. Xin lỗi nếu câu hỏi không rõ ràng. –

+0

Nên là cộng đồng wiki – skaffman

Trả lời

25

tôi có thể cung cấp cho bạn hai ví dụ mà chúng ta sử dụng nó:

  • Tự động đăng ký các đối tượng trong JMX để quản lý từ xa. Nếu một lớp được chú thích với chú thích @AutoRegister của chúng tôi, chúng tôi có một khía cạnh để theo dõi các phiên bản mới của lớp đó và tự động đăng ký chúng trong JMX.

  • Ghi nhật ký kiểm tra (trường hợp sử dụng AOP tiêu chuẩn vàng). Hơi thô sơ của nó nhưng cách tiếp cận chung là chú thích các phương thức đại diện cho một số hành động có thể kiểm tra. Kết hợp với một cái gì đó giống như Xuân An, chúng ta có thể có được một ý tưởng khá tốt của:

    • người người dùng là
    • gì phương pháp họ đang gọi
    • những gì dữ liệu mà họ đang cung cấp
    • gì thời gian phương pháp được gọi
    • liệu gọi là thành công hay không (ví dụ, nếu một ngoại lệ được ném)
3

mức Phương pháp bộ nhớ đệm, nếu phương pháp của bạn là quốc tịch (Tôi có nghĩa là lợi nhuận cùng một giá trị khi gọi nhiều lần với giá trị tham số giống nhau). Điều này hiệu quả hơn trong trường hợp các phương thức DAO vì nó tránh được việc truy cập cơ sở dữ liệu.

4
  • Đọc/ghi khóa. Thay vì sao chép cùng một đoạn mã, tôi đã sử dụng một khía cạnh để xác định các phương thức cần có khóa đọc hoặc khóa độc quyền.
7

Để xem mức độ phù hợp của AOP về khả năng áp dụng, tôi thực sự khuyên bạn nên đọc sách Aspect-Oriented-Software-Development-Use-Cases.Cuốn sách này giải thích các trường hợp sử dụng các yêu cầu chức năng và phi chức năng sử dụng AOP. Sau đó bạn sẽ thấy rằng các khía cạnh có thể được sử dụng cho các yêu cầu khác hơn là ghi nhật ký, truy tìm, bảo mật, v.v.

2
  • Xử lý ngoại lệ: không cần phải lặp lại danh sách khủng khiếp ... bắt, bắt, nắm bắt vv - cũng có nghĩa là xử lý ngoại lệ được đảm bảo nhất quán.
  • Giám sát hiệu suất: Rất hữu ích khi sử dụng một khía cạnh không xâm phạm và có thể được thực hiện sau khi thực tế và sau đó tắt khi không còn cần thiết nữa.
1

tôi cũng sẽ giới thiệu các khía cạnh về:

  • phương pháp async gọi
  • Giám sát

Với mùa xuân và tcServer (nhà phát triển), bạn có thể dễ dàng theo dõi tất cả đậu mùa xuân của bạn với Chú thích @Component. Bạn có thể thấy thời gian sử dụng, dữ liệu đầu vào và trả về bao gồm các ngoại lệ.

1

INotifyPropertyThay đổi và tương tự như vậy.

Về cơ bản, ở bất kỳ nơi nào có mã trông như thế này - hãy sử dụng một khía cạnh và bạn đã hoàn tất.

3

Chúng tôi sử dụng nó để quản lý giấy phép phần mềm, nghĩa là cho phép phần mềm chỉ chạy nếu máy tính đã cài đặt một số giấy phép cụ thể. Nó không phải là khác nhau từ sử dụng được liệt kê của bạn, vì nó là một hình thức kiểm tra an ninh.

tôi xuất bản một blog entry mô tả một thực hiện thực tế here

1

Runtime kiểm tra các hợp đồng mã. Code Contracts for .NET sử dụng AOP cho

Kiểm tra thời gian chạy. Trình ghi đè nhị phân của chúng tôi sửa đổi một chương trình bằng cách tiêm các hợp đồng, được kiểm tra như một phần của việc thực thi chương trình.

0

Chúng tôi sử dụng AspectJ để hoàn thành AOP. Các trường hợp sử dụng ngoài các trường hợp nêu trên như sau:

  • Hạn chế quyền truy cập vào các cuộc gọi phương thức đến chỉ một vài lớp.
  • Tự động chú thích các phương pháp/lớp/trường đã chọn.
Các vấn đề liên quan