STACKJAVA

AOP là gì? Aspect Oriented Programming trong Java

AOP là gì? Aspect Oriented Programming trong Java

1. AOP là gì?

Aspect Oriented Programming (AOP) – lập trình hướng khía cạnh: là một kỹ thuật lập trình (kiểu như lập trình hướng đối tượng) nhằm phân tách chương trình thành cách moudule riêng rẽ, phân biệt, không phụ thuộc nhau.

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

AOP không phải dùng để thay thế OOP mà để bổ sung cho OOP.

Ví du 1:

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

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

– Trong AOP có khái niệm “lát cắt”, “điểm cắt”, tạm hiểu là module A sẽ xen vào module B để thực hiện 1 chức năng nào đó mà không làm ảnh hưởng module B, “điểm cắt” là vị trí mà module A xen vào module B

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

Điểm cắt ở đây tùy vào xếp muốn, luật yêu cầu, ví dụ luật yêu cầu là phải quyết toán thuế cuối năm thì phòng kế toán sẽ thực hiện lát cắt quyết toán thuế cho các phòng ban còn lại vào cuối năm.

Ví dụ 2:

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

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

Bây giờ áp dụng AOP, ta sẽ phân tách chức năng log ra một module riêng và dùng nó thực hiện các lát cắt với các method cần thực hiện log.

Muốn log ở đầu method, điểm cắt sẽ là ở đầu các method, muốn cắt ở cuối method thì điểm cắt sẽ là cuối method.

Ví dụ 3:

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

filter ở đây cũng được coi như 1 module độc lập riêng rẽ. Chẳng hạn mỗi request gửi đến cần xác thực (kiểm tra login) ta chỉ cần cho nó đi qua 1 filter thực hiện xác thực là được, muốn sửa đổi cách xác thực thì ta chỉ cần sửa filter là xong.

2. Ưu nhược điểm của AOP

Ưu điểm:

Nhược điểm:

3. Các thuật ngữ trong AOP

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

4. Code ví dụ bằng Java.

Để thực hiện AOP trong Java ta có thể sử dụng  các cài đặt cung cấp bởi

Ví dụ AOP với Spring AOP: https://stackjava.com/spring/spring-aop-1.html

References:

https://docs.jboss.org/aop/1.0/aspect-framework/userguide/en/html/what.html