2016-12-27 4 views
3

私は現在、大きなJava/SwingアプリケーションをKotlinに移植すると評価しています。アプリケーションのドメインは、2Dグラフィックス、グラフ、グラフィック編集、シミュレーション/アニメーションです。私はKotlinのアプリケーションコア全体を書き直し、それをJavaバイトコードだけでなくJavaScriptにも移植したいと考えています。私は現在、いくつかのアダプタとブリッジクラスを使用して、JavaウィンドウとHTMLキャンバスの両方でレンダリングするKotlin描画コードを書くことができます。ここまでは順調ですね。KotlinをターゲットとするDependency Injectionの使用方法

私はアプリケーションで集中的に使用している依存関係注入に苦労しています。私はKotlinクラスの依存関係を注入したいが、それらをJVMとJavaScriptに渡すことができるので、私はKotlinのDIフレームワークを探した。 injektkodeinが見つかりましたが、どちらもJDKクラスに依存しているようですので、JavaScriptの使用例には当てはまりません。私は自分自身の純粋なKotlin DIフレームワークを開発し始めました。これはJavaScript用のKotlin transpilerがまだ反映をサポートしていないことに気づくまで続きました。

近い将来、ジェットブレインのJavaScriptトランスミッターでのリフレクションをサポートする計画を知っている人はいますか?あるいは、誰も依存性注入を使用する純粋なKotlinコードを書く別の方法を知っていますか?JavaとJavaScriptの両方にまだ移植可能ですか?この問題は、私が静的に設定可能な工場に戻ろうとしているかどうかわからないので、私のプロジェクトのKotlinのショーストッパとなるかもしれません。

答えて

0

KotlinからJavaScriptコンパイラへの反映をサポートするのは難しいことです。最悪のことは、JSファイルにメタデータを保存しなければならないということです。これはJSファイルを大きくし、必要な大きさにすることができるJARとは異なり、JSファイルを小さくすることが非常に重要です。また、このメタデータを展開し、リフレクションAPIを公開するコードをバンドルする必要があります。これにより、生成されたJSコードがさらに大きくなります。

JSコンパイラでリフレクションが実装されるかどうかはわかりません(もしそうであれば、DIのようなものを実装するための推奨方法ではないでしょう)。 1.1では利用できません。代わりに、開発者が特殊なコンパイラプラグインを作成し、シリアライゼーション、RPC、DIなどをサポートするためのコードを生成するGWTジェネレータに似た別のアプローチがあるかもしれません。現在、JSONシリアライゼーションを試しています。時間。良い結果が得られたら、コンパイラプラグインAPIを開いて、どんなユーザでも同様のことを実装できるようにします。

また、同じ目標を持ち、JAX-RS client proxiesと同様に、large subset of Jackson serializerを実装するために使用する独自のmetaprogramming APIを実装しています。しかし、私はまだKotlinの残りのチームに私のアイデアを採用し、Kotlinコンパイラに似たものをデザインするように依頼していません。

現在、IoCは主にデザインパターンであり、ライブラリではないため、いわゆる「貧乏人のDI」以外は何もありません。 DSLを作成するKotlinの機能を使って、私は素晴らしいものを作ることができると信じています。

+0

アレクセイさんの精巧な答えに感謝します。あなたは、JSリフレクションについてのあなたの点を完全に正しいです。私は今までそれを知らなかった。だから、誰かがあなたの将来のコンパイラプラグインに基づいてDIコンテナを提供するまで、私は "貧乏人のDI"(または "純粋なDI")を使うようあなたの助言に従います。あなたのメタプログラミングアプローチについてチームメイトに納得させようとすると幸いです。 JetBrainsでの作業に感謝します。 Javaプログラマとして20年を経た今、私はコトリンでのプログラミングが大好きで、私は戻ってほしくない。 – andreasfl

関連する問題