Аспектно-ориентированное программирование

13 июл. 2011 г. | | |

Что же такое  аспектно-ориентированное программирование? Ещё одна модная тенденция в мире разработки? Вики дает такое определение:

Аспе́ктно-ориенти́рованное программи́рование (АОП) — парадигма программирования, основанная на идее разделения функциональности для улучшения разбиения программы на модули.
Как-то знакомо звучит.
Ведь и другие парадигмы программирования поощряют разбиение функционала программы на модули, а также есть методологии, призванные помочь решить данную проблему - инверсия управления, например. Вот тут и проявляются главные отличия.  АОП заботится о выделении сквозной функциональности (аспектов). Сквозная функциональность - это раскиданный по коду функционал, который невозможно декомпозировать ни процедурными, ни объектно-оринетированными- средствами, например, логирование, проверка прав доступа., обработка ошибок. ООП позволяет проектировать программы в терминах объектов, каким-то образом связанных друг с другом. Случается так, что между объектами возникает слишком большая связанность (обычно при программировании на конкретные классы, а не на интерфейсы). С одной стороны, тут может иметь дело ошибка проектирования, с другой - программирования. И тут приходит на помощь методология IoC и программирование по контракту (программирование на интерфейс, а не на конкретный класс). IoC призвана уменьшить связанность, разорвать жесткие зависимости между классами, сделав возможным разбиение кода на отдельные модули.

Итак, у нас есть аспекты и объекты. Объекты - это маленькие целостные подсистемы одной большой декомпозированной системы. Например, объект "колесо"  в системе "машина" или "выключатель" в системе "лампа". Аспект будет подсистемой, включающей в себя служебный (т.е. не влияющий на поведение объектов) функционал. Например, логирование события, когда была включена/выключена лампа. Такой функционал никаким IoC не локализировать.

АОП - мощный инструмент при условии правильного применения. Перед тем, как решить внедрять его в проект (впрочем, как и любой другой инструмент), стоит задуматься: а надо ли? Тот ли масштаб у проекта? Не усложнит ли это жизнь? Не стоит кидаться на него только из-за того, что сейчас это модно.

Почитать:
Аспектно-ориентированное программирование
Использование АОП

0 коммент.:

Отправить комментарий