Giới thiệu về Lập trình hướng khía cạnh- AOP (Aspect-oriented programming)

Các thành phần của AOP

Công việc chuyển tải các yêu cầu của người sử dụng vào hệ thống phần mềm chưa bao giờ là việc đơn giản. Dù cho giới công nghệ thông tin đã đưa ra nhiều phương pháp giải quyết như: lập trình hướng đối tượng, hướng thành phần…nhưng chúng cũng chỉ có thể giải quyết được một số khía cạnh và chưa có phương pháp nào đáp ứng nhu cầu giải quyết các yêu cầu đan xen ở mức hệ thống( hay còn được gọi là cross – cutting concern). Để giải quyết các vấn đề mà các mô hình lập trình này chưa làm được hoặc làm được nhưng việc thực hiện quá nan giải, các nhà nghiên cứu đã đưa ra mô hình Lập trình hướng khía cạnh AOP.

AOP-avatar
Giới thiệu về AOP

Chắc có lẽ các bạn đã từng nghe, từng biết, thậm chí có đôi lần làm việc với mô hình lập trình hướng đối tượng – Object Oriented Programming (OOP); nhưng bạn đã từng nghe nói đến khái niệm AOP chưa? Bạn biết gì về AOP? AOP có ưu điểm, nhược điểm gì so với các phương thức lập trình khác? Bạn nên sử dụng nó hay không? Bài viết dưới đây sẽ trả lời cho bạn những câu hỏi đó.

Khái niệm và các đặc điểm cơ bản của AOP

Khái niệm AOP

Rất nhiều người trong chúng ta còn mơ hồ về định nghĩa AOP. AOP là viết tắt của cụm từ Aspect Oriented Programming (lập trình hướng khía cạnh). AOP là kiểu lập trình cho phép phân tách chương trình thành các module tách biệt, không phụ thuộc nhau. Chương trình kết hợp các module lại khi hoạt động, nhằm thực hiện các chức năng. Tuy nhiên, chỉ cần chỉnh sửa một module nào đó nếu cần sửa đổi chức năng.

AOP cho phép chúng ta thêm vào các ứng dụng đã tồn tại những đoạn code xử lý mới mà không phải chỉnh sửa code của các ứng dụng này.

Chẳng hạn khi xây dựng hệ thống đăng ký tạo tài khoản cho một trang web. Ngoài việc cho phép người dùng tạo tài khoản (core concern), hệ thống còn phải làm nhiều vấn đề khác (cross – cutting concern). Nào là: kiểm tra ràng buộc, chứng thực người dùng, xử lý ngoại lệ, debug, quản lý transaction, ghi log, đo hiệu suất ứng dụng,… Đồng nghĩa với việc logic của chương trình phải làm ti tỉ việc như: mở/đóng transaction, ghi log, xử lý ngoại lệ… Và khi có nhiều phương thức na ná như vậy trong ứng dụng, code sẽ bị liên kết vào nhau, duplicate code, rồi sẽ phân mảnh nhiều nơi, gây khó khăn đáng kể khi sửa đổi, khi thêm logic mới,…Sử dụng AOP sẽ giúp giải quyết vấn nạn này.

Giới thiệu lập trình hướng khía cạnh AOP
Các khái niệm thường thấy ở AOP

Một số khái niệm trong lập trình hướng khía cạnh AOP

Core concern (Primary concern): chính là requirement, logic xử lý mấu chốt của chương trình.

Cross-cutting concern: là các logic xử lý phụ cần được chương trình thực hiện khi core concern được xem như logging, security, monitoring, tracing, …

Joinpoint: là một điểm trong chương trình, là những chỗ chèn được các cross-cutting concern. Joinpoint có thể là ngoại lệ được throw ra, phương thức được gọi, hoặc có thể là field được thay đổi. Ví dụ, sau khi chạy một method nào đó, chúng ta cần ghi log lại. Jointpoint chính là điểm ngay sau method đó được thực thi.

Pointcut: có nhiều cách nhằm xác định Joinpoint, những cách như vậy gọi là Pointcut. Pointcut thực ra là các biểu thức, hoặc có thể hiểu nôm na là câu lệnh.

Advice: khi các xử lý phụ được bổ sung vào xử lý chính thì Code để thi hành các xử lý đó gọi là Advice. Advice có thể được phân thành các loại bên dưới:

*Before Advice: loại này chạy trước khi thực hiện các JoinPoint Method.

*After Advice (Finally Advice): loại này thực hiện sau JoinPoint. Dù JoinPoint có được thực thi thành công hay không, thậm chí dù có bị exception thì After Advice vẫn thực hiện được.

*After Returning Advice: loại này thực thi sau khi JoinPoint được thực thi thành công, không bị lỗi exception.

*After Throwing Advice: loại này cũng tương tự như After Returning Advice, tuy nhiên, dùng cho trường hợp JointPoint thực thi mà throw ra exception.

*Around Advice: loại này thực hiện xung quanh JoinPoint. Do vậy, người dùng có thể quyết định có thực thi JoinPoint hay không. Ngoài ra, nó cũng cho phép người dùng viết code mà Advice chạy trước hay sau JoinPoint tùy ý. Around Advice dường như có tất cả các chức năng của các loại Advice khác, bởi vậy có thể xem nó là loại quan trọng nhất, mạnh mẽ nhất.

Aspect: cũng giống như một Java class, một Aspect có thể gồm toàn bộ Cross-cutting Concern, các PointCut, các JoinPoint, các Advice. Để tạo ra Class Aspect, đơn giản người dùng có thể  config trong XML.

Target Object: các đối tượng mà advice được áp dụng gọi là các Target Object.

AOP Proxy: sử dụng để cài đặt các Aspect.

Weaving: quá trình kết nối các thành phần Aspect và Non-aspect(chẳng hạn như Object, Types) của một chương trình để tạo nên Advised Object gọi là Weaving.

Các thành phần của lập trình hướng khía cạnh AOP
Các thành phần của AOP

 

Ưu điểm của lập trình hướng khía cạnh AOP

AOP khắc phục những hạn chế và tăng hiệu quả của OOP (Object Oriented Programming). Trong khi OOP còn nhiều thiếu sót chẳng hạn như khó tạo ra những ứng dụng khó, phức tạp thì AOP ra đời bổ sung cho OOP. Tuy vậy, AOP không phải để thay thế hẳn OOP.

Với AOP khả năng tái sử dụng mã nguồn được tăng cường tối đa.

Trong AOP, module nào làm việc của module đó do vậy đảm bảo tính Single responsibility principle, giải quyết cả vấn đề code tangling và code scattering. Do vậy, tính module hóa cũng cao hơn các kiểu lập trình khác.

Một ưu điểm hữu ích khác của AOP là thiết kế đơn giản:“You aren’t gonna need it (YAGNI)”. Người dùng không bao giờ phải cài đặt trước mà chỉ cần cài đặt những cái thực sự cần thiết.

Bởi phân biệt ra phần nào là xử lý chính, phần nào là các xử lý liên quan nên code cũng gọn gàng hơn. Chức năng của chương trình thì chức năng phụ có thể bật tắt, hiệu chỉnh tùy ý, chức năng chính hoạt động bất kể chức năng phụ, các thay đổi của chức năng phụ không ảnh hưởng gì đến nó.

Bởi những ưu điểm ở trên mà việc tái sử dụng cũng trở nên dễ dàng hơn. AOP cũng giúp tiết kiệm kha khá thời gian thi công hệ thống, giảm giá thành sản phẩm – một trong những yếu tố quan trọng khi đưa sản phẩm ra thị trường.

Ưu Nhược Điểm của AOP
Ưu, Nhược Điểm của AOP

Nhược điểm

Dù có những ưu điểm vượt trội ở trên nhưng đáng buồn là AOP cũng có một số khuyết điểm dưới đây:

Do độ trừu tượng của chương trình cao nên yêu cầu về kiến thức và kỹ năng của lập trình viên cũng không hề thấp. AOP không phải là phao cứu sinh cho các thiết kế hời hợt.

Thật ra, có một số vấn đề mà AOP vẫn chưa giải quyết được. So với OOP, AOP chỉ giải quyết theo phương pháp tốt hơn mà thôi.

Hy vọng bài viết trên đây giúp bạn hiểu được sơ lược về AOP. Để nắm bắt chuyên sâu hơn nữa về nó, mời bạn tham khảo thêm các bài viết khác của freelancervietnam.vn nhé.