Я знаю. Сначала все выглядит очень ажурно. Но потом понимаешь, что сама парадигма переписывания IL ущербна и ни к чему хорошему не ведет. Опять же, я сравниваю с языком Воо, который дает практически те же приемущества, но без вопиющих недостатков.
Ага. Вы так говорите про АОП, пушто MS не выпустили msbuild с АОП-тасками. Выпустят — будете рекомендовать всем. А приложения с БД не будем писать, пока не появится новый Entity Framework. И до изобретения LINQ не стоило и браться писать запросы. И вообще, в код не будем лазать, пока не выпустят новый Resharper…
По-моему это его назначение. Тут просто надо понимать, где его надо использовать, а где-нет. Например, какие-то аспекты используются только в debug версии, на основе других — основывается функционал продукта (например, SmartInspect, Gibraltar)… Это как с любой технологией. Если ее использовать где ни попадя, то в итоге, конечно, приходишь к выводу что «не то»…
… Кстати правда. Столкнулся сегодня с проблемой, когда дебагер отказывался показывать информацию о переменных в foreach циклах! Решилось все отключением PostSharp. Так как проект новый-решил вообще пока отказаться от этого инструмента. Удобства есть, но скрытые камни мне не нужны =(
По моему цель этой статьи привести ссылку на главных конкурентов АОП. Правда по куче противопоказаний это становится утвержденем, что конкурентов у АОП все еще нет.
Все таки нужно отделять котят от котлет — АОП это парадигма, а DI это шаблон проектирования. АОП служит более фундаментальной цели — избавится от зависимости между разными компонентами системы совместно решающих одну задачу, и для решения фундаментальной проблемы ООП как «хрупкий базовый класс». Это главная проблема всех парадигм с повторно используемым кодом. Как гарантировать работоспособность системы при изменении любого компонента системы? Без рефакторинга и ревизий. Эта проблема решается сложными фреймворками и технологиями, но единого принципа нет. Очень схожей по сути, но более фундаментальной, является компонентная парадигма Вирта. Не удивительно, что АОП появилась в Xerox PARC, последнее место работы Вирта до его выхода на пенсию в 99.
Вы абсолютно правы! Целью этой статьи было как раз внести ясность, что АОП — это не DI, как многие полагают, а нечто большее, что стоит изучать, в чем стоит «набивать руку». Что это нечто большее чем просто концепт. Если сходить на сайт производителей, то можно убедиться что у того же PostSharp очень много именитых заказчиков. Это серьезная платформа, которая пока что не очень распространена в России.
Применяется ли АОП в скриптовых языках типа Perl, PHP, Python, Ruby (в алфавитном порядке), как реальный инструмент оптимизации процессов разработки или он актуален только для компилируемых языков со строгой статической типизацией?
PostSharp. Аспектно-ориентированное программирование vs Dependency Injection