Bạn đã trích dẫn ba công nghệ mà tất cả đều có ý định làm tương tự: thêm chức năng vào một codebase hiện tại mà không sửa đổi nó.
ASP.NET MVC và DI cả hai đặt giới hạn trên trong đó bạn có thể có các khía cạnh (bộ lọc hoặc bộ chặn) vì công nghệ chỉ có thể thêm hành vi tại một số địa điểm. Chỉ các công nghệ dựa trên trình biên dịch như PostSharp mới có khả năng thêm các khía cạnh ở khắp mọi nơi. Tuy nhiên, cả ba là triển khai các khái niệm AOP.
Các khía cạnh đã chứng minh lợi ích so với lập trình hướng đối tượng thông thường trong nhiều trường hợp sử dụng. Nó không phải là sự thật rằng mọi vấn đề duy nhất có thể được giải quyết bằng OOP thông thường với thiết kế tốt hơn với cùng một chi phí. Tuy nhiên, chính xác là AOP không phải là chủ đạo, và có những chi phí và rủi ro liên quan đến việc sử dụng một công nghệ phi chính thống (AOP được sinh ra vào những năm 90 và OOP vào những năm 60). Như với bất kỳ sự đổi mới nào, các diễn viên khác nhau có sự nhạy cảm khác nhau giữa các rủi ro và lợi ích, vì vậy có thể trở thành những người chấp nhận sớm hoặc muộn.
AOP không phải là trở ngại đối với thử nghiệm đơn vị, nhưng có rất ít trải nghiệm được chia sẻ về chủ đề. Nói chung, các khía cạnh phải được thử nghiệm dưới dạng các đơn vị riêng biệt của mã. Có những khía cạnh thiết yếu và không cần thiết.Thông thường, mã doanh nghiệp phải được kiểm tra cùng với các khía cạnh thiết yếu, nhưng các khía cạnh không cần thiết phải được vô hiệu hóa. Bạn có thể vô hiệu hóa các khía cạnh tĩnh tại thời gian xây dựng (chỉ loại trừ một số khía cạnh từ cấu hình xây dựng) hoặc tại thời gian chạy (làm cho khía cạnh phụ thuộc vào một số biến tĩnh mà bạn đặt thành sai trong khi thử nghiệm).
Nguồn
2013-02-26 09:26:16
Làm thế nào để tiêm thời gian biên dịch can thiệp vào thử nghiệm đơn vị? Bạn thậm chí sẽ không kiểm tra đơn vị mà không biên dịch bạn biết? – jfar
@jfar: Mã sản xuất của bạn được dệt cùng với các khía cạnh trong quá trình biên dịch. Bởi vì điều này bạn không thể kiểm tra mã sản xuất của bạn nữa trong sự cô lập. Khi kiểm tra đơn vị gọi một số mã sản xuất, các khía cạnh sẽ luôn được áp dụng. Trong thực tế, bạn không thể kiểm tra đơn vị, vì theo định nghĩa, một thử nghiệm đơn vị chạy trong sự cô lập. Những gì bạn sẽ có là một bài kiểm tra tích hợp. Bạn muốn hoàn tác yêu cầu của mình ngay bây giờ? – Steven
Mã của bạn luôn được kết hợp với nhau bởi trình biên dịch, sản xuất và kiểm tra đơn vị có thể có thể nhận được các phiên bản khác nhau của trình biên dịch để có thể có bất kỳ mã nào với trang trí hoặc DI hoặc bất kỳ thứ gì. Lỗ hổng trong câu trả lời này là AOP hoặc PostSharp không ảnh hưởng đến thử nghiệm đơn vị theo bất kỳ cách nào độc đáo hoặc đáng chú ý. – jfar