Что в двух словах представляет собой аспектно-ориентированное программирование?
Короче говоря, АОП - это способность незаметно внедрять действия в типичный поток другой программы. Он позволяет фиксировать экземпляры классов, вызовы методов, назначения и т. Д.
Это лучше, чем объектно-ориентированное программирование? Следует ли мне отучиться от ООП?
Нет и нет. Он работает вместе с любой поддерживающей его средой программирования. (См. Выше).
Если нет, как мне узнать, когда использовать тот или иной? Каковы основные различия между ними?
Вы используете АОП, как правило, когда хотите реализовать какие-то действия над сотнями классов, не манипулируя самими классами. Типичными примерами являются безопасность (авторизация права на вызов данного метода / класса) или ведение журнала. Однако, по моему опыту, я не использую его для этого. (Честно говоря, вообще не использую).
Как указано выше, на самом деле основной разницы не существует, поскольку они несопоставимы. Но, скажем, вы хотите реализовать ведение журнала "в обычном режиме", вы просто вызываете регистратор в соответствующих точках:
log.write("hello");
Но с помощью АОП вы можете создать «аспект», который присоединяется к каждому вызову метода, и регистрировать «вызванный метод b». Дело в том, что в АОП вы подходите скорее как «дробовик»: вы присоединяетесь ко всему или только к небольшому подмножеству. Как правило, лучше добавлять ведение журнала вручную.
Могу ли я преобразовать одно в другое?
Не совсем актуально, см. Другие ответы. Опять же, что касается безопасности, вы можете переключиться на модель АОП с типичной модели ООП this.IsAllowed () на что-то вроде if (callMethod.HasAttribute (foo)) {allowed = true; }
Надеюсь, эти ответы будут полезны. Дайте мне знать, если вы хотите, чтобы я расширился дальше.
person
Noon Silk
schedule
25.08.2009