Để tôi trả lời đầu tiên cho Max: thực sự, các khía cạnh không phải là thay thế thành các mẫu OOP tốt. Chúng là một phần bổ sung . Bất kỳ thiết kế AOP tốt nào đều bắt đầu với thiết kế OOP tốt. Nhưng các mẫu OOP đôi khi buộc bạn phải viết rất nhiều mã bằng tay. Đối với những trường hợp này, các khía cạnh có thể được sử dụng để tự động tự động triển khai mẫu OOP, không để thay thế chúng.
Khi bạn sử dụng AOP một cách thông minh, giải pháp của bạn có thể dễ hiểu hơn (mã doanh nghiệp không được trộn lẫn với mã bảo trì), để kiểm tra (bạn có thể kiểm tra khía cạnh độc lập với mã doanh nghiệp, tức là bạn không phải kiểm tra bất kỳ phương pháp kinh doanh nào theo đúng cách), thay đổi (bạn chỉ cần thay đổi khía cạnh khi bạn muốn thay đổi mẫu, thay vì thay đổi mọi lần triển khai mẫu).Bây giờ, nếu bạn lạm dụng từ AOP, nếu bạn sử dụng nó như một công cụ hack, nếu bạn không nghĩ về các mẫu OOP trước đó, thì bạn sẽ nhận được nhiều chi phí hơn lợi ích từ AOP. Như bất kỳ công cụ sắc nét nào, AOP nên được sử dụng một cách thông minh.
Quay lại câu hỏi ban đầu.
Ai bảo bạn nên đặt các khía cạnh trong AssemblyInfo.cs? Bạn có thể tạo một tệp mới có tên GlobalAspects.cs và đặt tất cả các khía cạnh cấp độ lắp ráp ở đó. Bạn nói đúng rằng AssemblyInfo.cs chỉ nên dùng cho siêu dữ liệu ở mức lắp ráp.
Nhưng cũng giống như bạn, tôi không thích các khía cạnh cấp độ lắp ráp. Tôi nghĩ rằng cần phải tránh. Vấn đề chính với các khía cạnh cấp độ tinh vi là họ dựa vào các quy ước đặt tên, và điều này là điều ác. (Cái ác này được gọi là sự mong manh của pointcut trong cộng đồng AOSD học thuật.) Thật vậy, khi bạn đổi tên một lớp hoặc không gian tên, bạn thay đổi tập hợp các phương thức áp dụng và điều này có thể nhanh chóng trở thành cơn ác mộng. Đó là lý do tại sao tôi không bao giờ sử dụng các khía cạnh dựa trên quy ước đặt tên cho bản thân mình.
Điều gì về khả năng đọc mã? Ở mức độ lớn, tôi nghĩ rằng mã có thể đọc được là mã ngắn. Nếu tôi có một phương thức kinh doanh được gọi là CreateProduct, tôi có thể chỉ muốn xem mã tạo sản phẩm. Hầu hết thời gian, tôi không quan tâm đến mã xử lý giao dịch, ngoại lệ hoặc truy tìm. Đó là đủ nếu tôi biết rằng một số khía cạnh xử lý điều đó đối với tôi.
Và làm sao tôi biết? Với PostSharp, bạn có phần mở rộng Visual Studio. Với AspectJ, bạn có trình cắm thêm AspectJ cho Eclipse (AJDT). Chúng hiển thị cho bạn, bên trong IDE, các khía cạnh nào được áp dụng cho mã mà bạn hiện đang thấy. Và nếu bạn thực sự muốn xem chi tiết (nhưng bạn hiếm khi thực sự muốn), bạn có thể sử dụng trình gỡ rối để bước vào các khía cạnh hoặc sử dụng Trình phản xạ để xem mã được sản xuất.
Tóm tắt:
- thiết kế AOP tốt luôn luôn bắt đầu với một thiết kế OOP tốt.
- Tránh dựa vào các quy ước đặt tên để áp dụng các khía cạnh.
- Sử dụng phần mở rộng PostSharp cho Visual Studio hoặc AJDT để trực quan hóa các khía cạnh trong mã của bạn.
Không biết về phần mở rộng PostSharp. Có lẽ nó đã không cài đặt đúng cách. –
Đây là một tính năng mới của PostSharp 2.0. –