このエピソードでは、モダン 3D ビューア フレームワークである NGV のプラグインのアプローチを見ていきます。これは NGV シリーズの一部です。
1 つのアプローチは、「クリックするだけで有効にする」ソリューションを開発者以外のエンド ユーザーにターゲットにすることです。欠点は、多くの追加のコードやドキュメントを作成して保守する必要があるため、時間がかかり、厳格なものになることです。
その結果、私たちは開発者をターゲットにし、開発者が簡単にできるようにすることに重点を置いています。実際、プラグインや再利用可能なコードの周りには、git、ES モジュール、docker など、活用できるテクノロジーがたくさんあります...
もう 1 つの大きな簡素化は、外部プラグインを使用しないことです。ソフトウェアを拡張するには、ユーザーがプロジェクトをフォークしてビルドする必要があります。
プラグインは保守可能なソリューションに適しています。プラグインを使用すると、何がコアで何がそうでないのかを考える必要があります。拡張可能または置き換え可能であるべきもの。抽象化やインターフェイスを導入する必要があります。これにより、コードがより分離され、理解しやすくなります。さらに、コア開発者以外の人々が API を理解できるようにドキュメントと手順を作成します。これにより、誰にとっても非常に簡単になります。
例として、低レベルの Cesium コードをアプリケーション コードから分離するプラグイン ngv-plugin-cesium-widget を作成しました。私たちは数十のアプリケーションを用意する予定です。プラグインに共通のコードがあることで、アプリケーション間でコードだけでなく概念も共有できるようになります。このプラグインは汎用であり、それを構成するためのインターフェイスが公開されています。プラグインはあらゆる構成を処理でき、将来性があります。
@customElement('ngv-plugin-cesium-widget') export class NgvPluginCesiumWidget extends LitElement { public viewer: CesiumWidget; @property({type: Object}) cesiumContext: IngvCesiumContext; @property({type: Object}) modelCallback: (name: string, model: Model) => void;
プラグイン システムを使用すると、ユーザーは設定を超えた権限を得ることができます。このソリューションはカスタマイズしたり、拡張したりすることもできます。
たとえば、すべての地理空間アプリケーションには検索バーがありますが、異なるバックエンド、異なる形式、異なる機能など、同じものはありません。
検索プラグインには事前定義されたプロバイダー (例: OpenstreetMap Nominatim) が付属しており、独自のプロバイダー (例: Pelias、Photon など) を提供できます。
これらのプロバイダーはそのアプリケーションから独立しており、簡単に共有したりアップストリームに提供したりできます。
さらに、検索プラグインは、基礎となるインターフェイスに従っている限り、別の実装で完全に置き換えることができます。
for (const pc of descr.config.providers) { const initialize = providerInitializers[pc.name]; if (!initialize) { console.error("could not find provider", pc.name, "skipping it"); continue; } const provider = initialize(pc.config); this.providers.push(provider); } this.autocomplete = new Autocomplete(this.autocompleteRef.value, { search: this.search.bind(this), onSubmit: this.onSubmit.bind(this), renderResult: this.renderResult.bind(this), getResultValue: this.getResultValue.bind(this), });
「プラグイン」の概念に非常に近いのが「モジュール」の概念です。実際、Ecmascript モジュールは、NGV フレームワーク内でプラグインを内部的に「パック」して利用できるようにする技術的な方法です。
同様に、Web コンポーネントは、UI プラグインを DOM に公開できるようにする技術標準です。
ユーザーがフォーク、適応、貢献できるようにすることで、git をプラグイン戦略を可能にする基本的なツールとみなすこともできます。
プラグインの問題に対する当社のソリューションは、標準に依存し、開発者のノウハウとエコシステムを活用したアーキテクチャです。これにより、理解しやすく、分離された、より保守しやすいコードが可能になります。
プラグイン システムを設計したことがありますか?それともそれについて考え始めましたか?コメントでフィードバックをお聞かせください。
以上がNGV: プラグインの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。