АсОП в разработке веб-ориентированного ПО
Попала в руки интересная статья на тему. Аспектно-ориентированный подход в разработке ПО (линка к сожалению нет, в. pdf)
В кратце: на ООП-проект накладываются аспекты предметной области, которые не связаны с объектной структурой проекта.
Задача AOSD в том, чтобы выделить сквозную функциональ-
ность и вынести ее за пределы бизнес логики приложений.
Например, есть CMS, и есть аспект безопасности. Классы и функции в данном аспекте могут быть самыми разными, и сделать «срез» (например поставить замеры потребляемых ресурсов) в данном аспекте — сложная задача, надо «пролезть» весь проект и…
Или другой вариант: есть сайт, и есть аспект SEO этого сайта — соответствующие методы, которые влияют на этот аспект, находятся тоже в разных местах. Если потребуется провести комплексный анализ того, что есть по сео — придётся опять лезть, ковырять (примеры могут быть не совсем удачные, но по степени геммороя кажутся наглядными :).
АсОП позволяет это делать просто и быстро.
Единственный «нюанс» в том, что для реализации этого подхода нужно, чтобы среда разработки или язык предоставляли эти возможности, а иначе просто получится ненужный перерасход времени и труда. И смысла что-либо подобного рода делать до появления первой надобности — нет.
В ПеХеПе вроде воткнули что-то реализующее. Интересно, можно ли изобрести что-то на парзере.
С обывательской точки зрения это очень похоже на таггирование в сайтах, только таггирование в проекте методов в контексте тага. Очень интересная парадигма — мне понравилась, не встречал раньше.
Кто уже сталкивался раньше?
p. s. Да, так же можно строить и апгрейды функционала (хотя, пожалуй это плохой путь :)
rezook
Ничегонепонял
Blax
:( плохо написал значит.
Поищу линку на статью
от тут http://mag.phpclub.ru/2006/jan-feb/phpi17_2006.pdf
11 страничка
KGT
Мое мнение – парадигма – это типа веб 2.0, как где-то писал Лебедев, "интересный маркетинговый ход неизвестно кому нужный".
А так, исли есть задачи:
— сосредоточить CEO-код в одном менсте;
— сделать возможность замеров производительности;
— сделать возможность апгрейдов функционала;
и т.д. и т.п.
то нормальные срецы могут сделать это используя и ООП, и функциональное программирование (видел оч. хорошие примеры, например, тот же интерпретатр PHP, который, насколько я знаю на С написан, не на С++). Просту сначала надо думать, а потом програмить :)
А вот что такое "таггирование в сайтах", к сожаление не знаею, прошу автора пояснить :)
KGT
Да, и не срецы а спецы, сори, проверки граматики здесь нема :)
Blax
можно писать от пользователя и тогда есть возможность поправить своё сообщение в течении некоторого времени.
По сути: Этот подход не отрицает ООП, скорее дополняет. Естественно и без него раньше обходились (как ещё раньше без ООП, а ещё раньше кодировали в инструкциях процессору, а ещё раньше компов не было :) ).
Мне понравилось, что с лёгкостью можно делать аспектные ну или контекстные срезы. Даже на работающей уже системе.
Попробую абстрагироваться:
Объектная иерархия: автомобиль, мост, колесо, покрышка, колпак, гайка. Всё отлично работает. Вдруг (или не вдруг :) ) возникает новый аспект – внешний вид тачки. Создаётся срез по объектам: покрышка, колпак, гайка.
С анализом их атрибутов, отвечающих за "крутость". При этом, если если среда позволяет сделать это быстро – почему нет? А если нужен анализ 100 объектов. В 5 аспектах….
Я в общем то не к тому чтобы ставить флаг на баню и к каждой визитке прикручивать "ядерный реактор". Мне просто понравилась концепция, которая потенциально позволяет накладывать аспекты из предметной области на программную разработку, не совершая при этом трюков с прослойками, трассерами, ну или чем там ещё можно обходить.
Надесюсь не заплутал в словах опять :)
p.s.
выявление и расстановка тематических тагов, ссылающихся на контент. Считается одним из атрибутов
:) Хотя мне кажется это не верно, хотя это уже совсем другая история.
KGT
Не знаю как цитировать… но,
[По сути: Этот подход не отрицает ООП, скорее дополняет. Естественно и без него раньше обходились (как ещё раньше без ООП, а ещё раньше кодировали в инструкциях процессору, а ещё раньше компов не было :) ).]
Ну это да, а еще раньше небыло кремов для рук и ног (отдельно), а также (!) для левой руки и правой руки (тоже отдельно!) :)
И еще, уже серьезно, хочу заметить, с момента возникновения С, на мой субъективный взгляд, ничего координально не изменилось. С превратился в С++ (ну да, немного удобнее, но суть та же), С++ – в яву – вообще мало чего изменилось, Java+C++ – в С#, тут ничего не могу сказать, не знаю, но думаю что тоже ревалюционного скачка нету. Вот, Пролог, например, да, хотя-бы попытка, только не знаю хронологическую последовательность этих шедверов, да и пролог че то не пользуется популярностью (хотя, конечно, это не совсем наша тема).
[Мне понравилось, что с лёгкостью можно делать аспектные ну или контекстные срезы. Даже на работающей уже системе. ]
Хотелось бы попросить автора дать пример из PHP, типа PHP ->Срез(полный);
Как это у них выглядит?
[Попробую абстрагироваться:
Объектная иерархия: автомобиль, мост, колесо, покрышка, колпак, гайка. Всё отлично работает. Вдруг (или не вдруг :) ) возникает новый аспект – внешний вид тачки. Создаётся срез по объектам: покрышка, колпак, гайка.
С анализом их атрибутов, отвечающих за "крутость". При этом, если если среда позволяет сделать это быстро – почему нет? А если нужен анализ 100 объектов. В 5 аспектах…. ]
Оч. просто, делаем классы:
class Колесо: pulic Деталь
{
};
class Мост: public Агрегат
{
Колесо колесо1;
Колесо колесо2;
Колесо колесо3;
Колесо колесо4;
}
class Машина: public СложныйАгрегат
{
private:
void* Мост;
public:
Срез СрезDOIT(НомерАспекта=1)
{
//релиз.
}
} Ауди;
И усё. :)
KGT
Пока "разговорился" хочу еще добавить. Это как с экстремальным программированием, всего то делов:
— делай читаемый код (с комментариями)
— сразу вставляй тесты
— делай, по возможности, вещи которые можно запустить как можно быстрее.
А поскольку _дисциплинированных_ программеров что в Америке что в Волгограде, в достаточном количестве, не найдешь, то еще добавили четвертный пункт, ДВОЕ за компом, что-бы друг друга десциплинировали.
Тоже парадигма, или метод. Пример, 1–2 года назад, в Яндексе, знание "экстремального программирования" оч. приветствовалось, а сейчас – тишина. Нужны специалисты, которые умеют _работать_ в указанной Яндексом области и никакого экстремального программирования. Умерает парадигма. Как и многие другие.
rezook
Вот вы злые :-)
З.Ы. цитировать можно через общепринятое [ q ] естественно, пробелы между скобками убираем [ /q ]
Blax
KGT:
ну не знаю что сказать :)
в том, что люди ищут новые практики и методики (ХP это набор практик) мне кажется логичной тенденцией. А то, что из них время подтверждает немногие – тоже логично. Тут не о чем спорить – посмотрим, может это тоже тупичёк, а может будет применятся.