Cách tốt nhất để lập trình hướng-khía cạnh trong .NET là sử dụng các kỹ thuật thiết kế nổi tiếng. Ví dụ, bằng cách áp dụng các SOLID principles bạn có thể đạt được sự linh hoạt và mô-đun bạn cần để cho phép thêm mối quan tâm xuyên suốt. Nếu bạn có quyền thiết kế, thậm chí bạn sẽ có thể áp dụng hầu hết các mối quan tâm xuyên suốt mà không có bất kỳ khung công tác nào. Đó là một sai lầm khi nghĩ rằng OOP là không phù hợp để làm AOP.
Dưới đây là một số gợi ý:
- Đừng phụ thuộc vào trường hợp cụ thể, nhưng phụ thuộc vào trừu tượng.
- Đừng trộn lẫn các mối quan tâm chéo và logic nghiệp vụ trong cùng một lớp.
- Thêm mối quan tâm chéo bằng cách gói các lớp học với logic nghiệp vụ trong các lớp học triển khai các mối quan tâm đó (decorators).
- Tìm các hiện vật phổ biến trong thiết kế của bạn và mô hình hóa chúng bằng nhau, tốt nhất là sử dụng cùng một loại trừu tượng. Hãy xem ví dụ this và this.
Khi bạn đã có được sự trừu tượng đúng tại chỗ, thêm mối quan tâm cắt ngang mới vào hệ thống chỉ là vấn đề viết một lớp trang trí mới và gói nó xung quanh việc triển khai đúng. Nếu trừu tượng là chung chung, bạn có thể bọc một trang trí đơn xung quanh một nhóm lớn các lớp (mà chính xác là những gì AOP là về).
Mặc dù các kỹ thuật như proxy động và dệt mã có thể làm việc dễ dàng hơn với ứng dụng được thiết kế kém, thực sự không có sự thay thế nào cho thiết kế tốt. Sớm hay muộn bạn sẽ bị đốt cháy. Điều này không có nghĩa là việc tạo mã động và tạo mã động không nên được sử dụng. Nhưng nếu không có một thiết kế ứng dụng thích hợp ngay cả những kỹ thuật đó sẽ chỉ hữu ích một chút.
Sẽ rất hữu ích nếu bạn cung cấp liên kết đến tất cả AOP, để tiết kiệm cho người đọc một chút thời gian với Google. Tôi hy vọng câu hỏi/câu trả lời này sẽ trở thành một bản tóm tắt tuyệt vời về các tùy chọn AOP khác nhau trong .NET –
52 người đã bình chọn đó là một câu hỏi mang tính xây dựng. 5 bình chọn nó không mang tính xây dựng. Ai quyết định? Ít nhất người điều hành nên thay đổi hoặc cải cách câu hỏi, nhưng họ nên cân nhắc hầu hết ý kiến của mọi người. – Revious
@Revious Hoàn toàn đồng ý! – Legends