AOP là gì? Ưu nhược điểm của AOP, Aspect Oriented Programming trong Java

Nguồn: https://stackjava.com/faq/aop-la-gi-aspect-oriented-programming-trong-java.html

Lập trình hướng khía cạnh (AOP) là một kỹ thuật lập trình để phân tách chương trình thành các module riêng rẽ và không phụ thuộc vào nhau, tương tự như lập trình hướng đối tượng.

Trong quá trình thực hiện, chương trình sẽ kết hợp các module để thực hiện các chức năng, nhưng chỉ cần sửa đổi 1 module khi cần sửa đổi 1 chức năng.

AOP không thay thế OOP mà bổ sung cho nó. AOP là gì? Ưu nhược điểm của AOP, Lập trình hướng khía cạnh trong Java

Ví dụ 1:

Một công ty được chia thành nhiều phòng ban như phòng kỹ thuật, phòng kế toán, phòng kinh doanh (mỗi phòng là một module trong chương trình)…

Mỗi phòng ban thực hiện một nhiệm vụ riêng, nhưng cần kết hợp lại để hoạt động như một công ty.

– Trong AOP, có khái niệm “gắn vào” và “điểm gắn vào”, ý nghĩa là module A sẽ gắn vào module B để thực hiện một chức năng mà không ảnh hưởng đến module B. “Điểm gắn vào” là vị trí mà module A gắn vào module B.

Có Thể Bạn Quan Tâm :   ARPA là gì? Toàn tập về tiền điện tử ARPA

Ví dụ, trong công ty, tất cả nhân viên đều cần thực hiện quyết toán thuế. Nếu từng người làm riêng sẽ tốn rất nhiều thời gian và ảnh hưởng đến công ty. Phòng kế toán sẽ gắn vào và thực hiện quyết toán thuế cho tất cả nhân viên. Khi luật thuế thay đổi, chỉ cần phòng kế toán chỉnh sửa để phù hợp, không ảnh hưởng đến các phòng ban khác. (Module phòng kế toán gắn vào các phòng ban khác để thực hiện quyết toán thuế)

Điểm gắn vào tùy thuộc vào yêu cầu và luật, ví dụ nếu luật yêu cầu phải quyết toán thuế cuối năm, phòng kế toán sẽ gắn vào và thực hiện quyết toán thuế cho các phòng ban khác vào cuối năm.

Ví dụ 2:

Trong code, bạn thường viết log cho các method (method nào chạy, lỗi gì xảy ra…). Việc viết log không liên quan đến chức năng của method.

Nếu yêu cầu chuyển sang chỉ viết log khi bắt đầu các method chẳng hạn, bạn lại phải sửa tất cả các method đó.

Có Thể Bạn Quan Tâm :   Bảo Trợ Truyền Thông Là Gì? Cách Xin Bảo Trợ Truyền Thông Và Làm Chiến Dịch Hiệu Quả

Áp dụng AOP, bạn có thể tách chức năng log ra một module riêng và gắn vào các method cần viết log.

Nếu muốn viết log ở đầu method, điểm gắn vào sẽ là ở đầu method, muốn gắn vào cuối method thì điểm gắn vào sẽ là cuối method.

Ví dụ 3:

Trong lập trình web, có 1 khái niệm filter, tức là tất cả các request được chọn sẽ đi qua filter đó.

Filter cũng có thể coi là một module độc lập riêng rẽ. Ví dụ, mỗi request cần xác thực (kiểm tra đăng nhập), bạn chỉ cần cho nó đi qua một filter thực hiện xác thực, và muốn thay đổi cách xác thực, chỉ cần sửa filter là xong.

Ưu điểm:

  • Thiết kế đơn giản: “You aren’t gonna need it (YAGNI)” – chúng ta chỉ triển khai những thứ thực sự cần thiết mà không cần triển khai trước.
  • Chương trình gọn nhẹ: mỗi module chỉ làm những thứ nó cần làm, giải quyết vấn đề rối code và phân tán code.
  • Dễ tái sử dụng.
Có Thể Bạn Quan Tâm :   Lỗi 502 Bad gateway là gì? Nguyên nhân & cách khắc phục từ A-Z

Nhược điểm:

  • Khái niệm trừu tượng, độ trừu tượng của chương trình cao
  • Luồng chương trình phức tạp.

Để minh họa, mình sẽ lấy ví dụ về việc tách chức năng log.

  • Core concerns: các hàm chính của chương trình (các method cần viết log)
  • Crosscutting concerns: các chức năng khác của chương trình (chức năng log)
  • Join points: một điểm trong chương trình, là nơi bạn có thể chèn các “hoạt động tuỳ chỉnh” của mình
  • Pointcut: có nhiều cách để xác định join point, những cách đó được gọi là pointcut.
  • Advice: các xử lý phụ được thêm vào xử lý chính, mã để thực hiện các xử lý đó được gọi là Advice.

Để thực hiện AOP trong Java, bạn có thể sử dụng các thư viện cung cấp bởi:

  • AspectJ
  • Spring AOP
  • JBoss AOP Ví dụ AOP với Spring AOP: https://stackjava.com/spring/spring-aop-1.html Ví dụ AOP với Spring + AspectJ: https://stackjava.com/spring/spring-core-aop-aspectj.html

Nguồn: https://stackjava.com/faq/aop-la-gi-aspect-oriented-programming-trong-java.html

Back to top button