Как Аспектно-ориентированное программирование (АОП) влияет на качество кода?

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

Многие сайты, которые я видел, плюс презентация от разработчиков AspectC++, представляли варианты использования, которые я посчитал довольно сомнительными.

Они говорили о том, как AOP можно использовать для обработки ошибок (выдачи исключений), проверки границ параметров и возвращаемых значений, возврата безопасных нулевых объектов в случае, если что-то идет не так, безопасность и т. Д. Это просто плохие примеры (а не фактическое использование) случаи), или я что-то упустил?

Как вы должны знать, что происходит, когда вы вызываете функцию? Практически все может случиться, в зависимости от того, какие аспекты вы решили применить. Разве это не испортит вещи действительно очень плохо? Как насчет документации API, как я должен написать это?

До настоящего времени единственными хорошими вариантами использования AOP, которые я видел, являются такие вещи, как ведение журнала или профилирование - вещи, которые не влияют на реальный логический поток и служат только в качестве инструментов отладки.

Полезно ли АОП для чего-то еще, кроме механизмов отладки?

1 ответ

Решение

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

Я бы не стал его использовать везде, где вам нужно задаться вопросом, что происходит, когда вы вызываете функцию. Это похоже на запах кода для меня.

Другие вопросы по тегам