Ngoài câu trả lời được chấp nhận, tôi muốn đề cập đến một ví dụ khác cho mối quan tâm xuyên suốt: từ xa. Nói rằng tôi chỉ muốn gọi các thành phần khác trong hệ sinh thái của mình như thể chúng đang chạy trong quá trình. Có thể trong một số trường hợp họ thậm chí làm. Nhưng bây giờ tôi muốn chạy các dịch vụ của mình được phân phối trong một đám mây hoặc cụm. Tại sao tôi nên quan tâm đến khía cạnh này như một nhà phát triển ứng dụng? Một khía cạnh có thể quan tâm đến việc tìm ra ai sẽ gọi và làm thế nào, tuần tự hóa dữ liệu được truyền nếu cần thiết và thực hiện cuộc gọi từ xa. Nếu mọi thứ đang chạy trong quá trình, khía cạnh sẽ chỉ chuyển tiếp cuộc gọi địa phương. Về phía callee, khía cạnh sẽ loại bỏ dữ liệu, thực hiện cuộc gọi cục bộ và trả về kết quả.
Bây giờ hãy để tôi kể cho bạn một câu chuyện nhỏ về những thứ "tầm thường" như đầu ra nhật ký: Chỉ vài tuần trước tôi đã tái cấu trúc một cơ sở mã phức tạp nhưng không quá lớn (khoảng 250K dòng mã) cho một khách hàng. Trong vài trăm lớp, một loại khung đăng nhập đã được sử dụng, trong vài trăm lớp khác. Sau đó, có vài ngàn dòngSystem.out.println(*)
nơi thực sự cần phải có đầu ra đăng nhập. Vì vậy, tôi đã kết thúc với việc sửa hàng ngàn dòng mã nằm rải rác trong cơ sở mã. May mắn thay tôi có thể sử dụng một số thủ thuật thông minh trong IntelliJ IDEA (tìm kiếm & thay thế cấu trúc) để tăng tốc toàn bộ hành động, nhưng bạn không nghĩ nó là chuyện nhỏ! Chắc chắn, ghi nhật ký gỡ lỗi phụ thuộc mạnh vào ngữ cảnh sẽ luôn xảy ra trong thân phương thức, nhưng nhiều loại ghi nhật ký quan trọng như theo dõi các cuộc gọi phương thức (thậm chí phân cấp với đầu ra thụt vào độc đáo), ghi nhật ký cả ngoại lệ được xử lý hoặc không xử lý, kiểm tra người dùng (ghi nhật ký cuộc gọi phương pháp hạn chế dựa trên vai trò người dùng) và vv có thể dễ dàng được thực hiện ở các khía cạnh mà không làm ô nhiễm mã nguồn. Nhà phát triển ứng dụng hàng ngày không cần phải suy nghĩ về nó hoặc thậm chí nhìn thấy các cuộc gọi logger nằm rải rác trên cơ sở mã.
Tôi có thể đưa ra những lời giải thích tương tự cho các mối quan tâm xuyên suốt khác. Giữ mã sạch và không bị phân tán và rối IMO là vấn đề chuyên nghiệp, không phải bất cứ điều gì tùy chọn. Cuối cùng nhưng không kém phần quan trọng, nó giữ cho mã có thể đọc được, có thể duy trì, có thể tái cấu trúc. Amen.