use*_*280 5 javascript dependency-injection kotlin
我目前正在评估将大型 Java/Swing 应用程序移植到 Kotlin。该应用程序的领域是 2D 图形、图形、图形编辑和模拟/动画。我想用 Kotlin 重写整个应用程序核心,并将其转换为 Java 字节码和 JavaScript。我目前能够使用一些适配器和桥接类编写在 Java 窗口和 HTML 画布中呈现的 Kotlin 绘图代码。到现在为止还挺好。
现在我正在为依赖注入而苦苦挣扎,我在我的应用程序中大量使用了它。我想在我的 Kotlin 类中注入依赖项,并且仍然能够将它们转换为 JVM 和 JavaScript,所以我寻找了 Kotlin 的 DI 框架。我找到了injekt和kodein,但看起来它们都依赖于 JDK 类,因此它们不适用于我的 JavaScript 用例。因此,我开始开发自己的纯 Kotlin DI 框架,该框架进展顺利,直到我意识到用于 JavaScript 的 Kotlin 转译器尚不支持反射,否则您将无法进行依赖注入。
有人知道 JetBrains 计划在不久的将来在他们的 JavaScript 转译器中支持反射吗?或者有人知道另一种编写使用依赖注入的纯 Kotlin 代码的方法,并且仍然可以转换为 Java 和 JavaScript?这个问题可能会成为我的项目的 Kotlin 表演障碍,因为我不确定我是否想回到静态可配置工厂。
支持 Kotlin 到 JavaScript 编译器的反射是一件棘手的事情。最糟糕的是,你必须以某种方式将元数据存储在 JS 文件中,这使得 JS 文件很大,并且与 JAR 不同,JAR 可以根据需要多大,拥有小的 JS 文件非常重要。此外,您还必须捆绑解压此元数据并公开反射 API 的代码,这使得生成的 JS 代码变得更大。
我不确定 JS 编译器是否会实现反射(或者如果会的话,可能不会推荐使用 DI 等实现方式)。它肯定不会在 1.1 中提供。相反,可能有另一种类似于 GWT 生成器的方法,开发人员可以编写特殊的编译器插件并生成一些代码来支持序列化、RPC、DI 等。我们目前正在试验 JSON 序列化,并在编译期间生成序列化器 -时间。如果我们得到好的结果,我们可能会开放我们的编译器插件 API,以便任何用户都可以实现类似的事情。
另外,我有一个业余项目,它有类似的目标,它实现了自己的元编程 API,我用它来实现Jackson 序列化器的大子集而无需任何反射,以及JAX-RS 客户端代理。然而,我仍然未能推动剩下的 Kotlin 团队采用我的想法并为 Kotlin 编译器设计类似的东西。
目前,除了使用所谓的“穷人的 DI”之外,你别无选择,因为 IoC 主要是设计模式,而不是库。借助 Kotlin 创建 DSL 的功能,我相信可以创建一些不错的东西。
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |