Аспекты, макросы, отражения и другие тонкости - хорошие части
Я заметил, что уловки «метапрограммирования» (в мире замыканий у функций есть метаданные, в оо-мире у нас есть такие понятия, как рефлексия, АОП и т. Д.) Могут быть хорошим способом развязки и расширить функциональность существующего кода, не редактируя его. Такие приемы позволяют нам перехватывать, перенаправлять и переносить функциональные части нашего кода, чтобы он мог быть расширен динамичным способом.
Страшная часть
Однако, как утверждают многие, чрезмерное использование макросов может затруднить понимание кода. Шаблон архитектуры программного обеспечения «классной доски», где несколько агентов изменяют или редактируют общий ресурс, может быть опасным, если мы не будем тщательно управлять созданием этих агентов. Наконец, я хотел бы неофициально отметить, что давняя популярность C ++ и java, по крайней мере частично, обусловлена тем фактом, что они являются языками «без сюрпризов» - где код является ясным, явным и процедурным. **
Проблема: перспектива использования методов динамического ввода кода для уменьшения количества компонентов и развязки котлов требует «нового» подхода к документации, проектированию классов и разработке программного обеспечения?
Мои вопросы
Требуется ли для того, чтобы документировать / развертывать обычный код, управлять исходными кодами, интегрировать библиотеки, другие или новые методы, когда мы начинаем приспосабливать методы метапрограммирования в сочетании с нашими более традиционными методологиями ОО?
Например, должны ли мы рассматривать использование метапрограммирования как альтернативу другим, более традиционным методам ОО программирования?
Существует ли общий набор известных красных флагов, введенных метапрограммированием, - и как мы можем их избежать?
Каковы наилучшие варианты использования аспектов, рефлексии и других динамических программных методов?