2008-09-15 30 views
12

Tôi đã sử dụng một số giải pháp kiểu AOP cơ bản cho các mối quan tâm chéo như bảo mật, ghi nhật ký, xác thực, vv Giải pháp của tôi đã được giải quyết xung quanh Castle Windsor và DynamicProxy. Tôi đã đi xuống tuyến đường này bởi vì tôi có thể áp dụng tất cả mọi thứ bằng cách sử dụng một DSL dựa trên DSL và giữ mã của tôi sạch thuộc tính. Tôi đã nói vào cuối tuần để có một cái nhìn tại PostSharp vì nó được cho là một giải pháp "tốt hơn". Tôi đã có một cái nhìn nhanh về PostSharp, nhưng tôi đã được đưa ra bởi việc sử dụng thuộc tính.Áp dụng AOP

Có ai đã thử cả hai giải pháp và muốn chia sẻ trải nghiệm của họ không?

Trả lời

9

Tôi chỉ nhìn vào lâu đài-windsor trong một thời gian ngắn (chưa) vì vậy tôi không thể bình luận về điều đó nhưng tôi đã sử dụng postsharp.

Làm việc sau khi dệt tại thời điểm biên dịch. Nó quảng cáo một bước sau biên dịch cho bản dựng của bạn, nơi nó sửa đổi mã của bạn. Mã được biên dịch như thể bạn vừa lập trình các mối quan tâm cắt chéo vào mã của bạn. Đây là một chút hiệu quả hơn so với thời gian chạy dệt và vì việc sử dụng các thuộc tính Postsharp là rất dễ sử dụng. Tôi nghĩ rằng việc sử dụng các thuộc tính cho AOP không phải là vấn đề khi sử dụng nó cho DI. Nhưng đó chỉ là sở thích cá nhân của tôi.

Nhưng ...

Nếu bạn đã sử dụng lâu đài cho dependency injection Tôi không thấy một lý do chính đáng tại sao bạn không nên cũng sử dụng nó cho AOP thứ. Tôi nghĩ rằng mặc dù AOP tại thời gian chạy là một chút chậm hơn so với thời gian biên dịch nó cũng mạnh hơn. AOP và DI là quan điểm của tôi liên quan đến ý kiến ​​vì vậy tôi nghĩ rằng đó là một ý tưởng tốt để sử dụng một khuôn khổ cho cả hai. Vì vậy, tôi có thể sẽ xem xét các công cụ lâu đài một lần nữa dự án tiếp theo tôi cần AOP.

14

Couple của vấn đề nhỏ với PostSharp ...

Một vấn đề tôi đã có với PostSharp là trong khi sử dụng asp.net, số dòng cho thông điệp ngoại lệ là 'ra' bằng của số hướng dẫn IL tiêm vào các tập hợp của PostSharp vì các PDB cũng không được tiêm :-).

Ngoài ra, không có hội đồng PostSharp có sẵn khi chạy, lỗi thời gian chạy xảy ra. Sử dụng Windsor, có thể tắt cắt ngang vào một ngày sau đó mà không cần biên dịch lại mã.

(hy vọng điều này có ý nghĩa)

+5

Đây là một câu trả lời khá cũ mà tôi tình cờ, nhưng tôi chỉ muốn lưu ý rằng PostSharp sao bây giờ thực sự chuyển đổi các tập tin PDB, vì vậy vấn đề gỡ lỗi là không còn nữa (xem: http://stackoverflow.com/questions/2006508/postsharp-pdb-debugging-and-referenced-assemblies) –