java - 管理元编程(AOP/反射/宏)技术复杂性的实践

标签 java macros clojure lisp aop

方面、宏、反射和其他细节 - 好的部分

我注意到“元编程”技巧(在 clojure 世界中,函数具有元数据,在 oo 世界中,我们有反射、AOP 等概念......)可以是解耦和扩展现有代码的功能,而无需对其进行编辑。这些技巧允许我们拦截、重定向和包装代码的功能部分,以便它可以以高度动态的方式进行扩展。

可怕的部分

然而,正如许多人声称的那样 - 过度使用宏会使代码难以理解。如果我们不仔细管理这些代理的创建,“黑板”软件架构模式(其中多个代理修改或编辑公共(public)资源)可能会很危险。最后,我想非正式地指出,C++ 和 Java 的长期流行至少部分是因为它们是“毫无意外”的语言 - 代码清晰、明确且程序化。**

问题:动态代码注入(inject)技术减少样板文件和解耦功能集的 promise 需要一种关于文档、类设计和软件工程的"new"思维方式?

我的问题

当我们开始将元编程方法与更传统的面向对象方法结合起来时,我们记录/部署普通代码、管理源代码包、集成库的方式是否需要不同或新技术?

例如,我们是否应该考虑使用元编程来替代其他更传统的 OO 编程技术?

元编程是否引入了一组通用的已知危险信号 - 我们如何避免它们?

使用方面、反射和其他动态软件技术的最佳用例是什么?

最佳答案

我发现 AOP 在软件项目中需要非常小心地使用,并且有明确的目的。我发现它对于一些样板流程(例如事务划分、安全性和日志记录)很有用,但很容易让自己陷入 AOP 的麻烦,并且它可能成为意外复杂性的主要来源。

关于java - 管理元编程(AOP/反射/宏)技术复杂性的实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8686657/

相关文章:

旋转设备时 ScrollView 中出现 java.lang.IllegalStateException

c - 与类对象宏同名的类函数宏

macros - 编写一个 `define-let` 宏,卫生

c++ - 删除遗留代码中的宏

parsing - Clojure-解析字符串至今

java - 为什么 flyway 在设置 outOfOrder 为 true 时会产生警告信息?

java - java.library.path Eclipse 中没有 sapjco3

Java Cryptonight 哈希算法 - 扩展 AES key 长度?

clojure - 使用 core.async 进行节流功能

java - 我应该如何在 clojure 中表示国际象棋位板?