問題タブ [plugin-architecture]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java プラグイン フレームワークの選択
さまざまな種類の計算機を「プラグイン」できるようにする、実装中のサービス用の単純なプラグイン フレームワークを実装する方法を決定しようとしています。
Java プラグイン フレームワークに関する多くの投稿を読んだ後、最も一般的なオプションは次のように思われます。
- OSGI
- "独自の" プラグイン フレームワークを展開する
- Java プラグイン フレームワーク( JPF)
- Java シンプル プラグイン フレームワーク( JSPF)
OSGI は必要以上にあるようです。
「独自のロール」は問題ありませんが、共通のライブラリを再利用するとよいでしょう。
つまり、JPF と JSPF に行き着きます。JPFはもう活発に開発されていないようです。
JSPF は非常にシンプルで、必要なものはすべて揃っているように見えます。しかし、私はそれについてあまり聞いたことがありません。StackOverflow に関する投稿を1 つしか見たことがありません。他に JSPF の経験がある人はいますか? または、このデザインの選択に関するその他のコメントはありますか?
更新:これには必ずしも正しい答えがあるとは限りません..しかし、本当に本当に簡単な解決策が必要なので、Pavolのアイデアを採用します. 素敵なガイドをありがとうEoH。
java - Spring の DI を使用して Web アプリケーションでユーザーごとに実装を交換する方法
Web アプリケーションが中央支払い処理エンジンであるとします。この場合、各ユーザーは、クレジット カードを処理する異なるクレジット カード プロバイダーを持っている場合があります。
すべての実装が準拠するインターフェイスがあります。
アプリケーションを再コンパイルせずに、新しい実装を展開フォルダー (.jar ファイル) にドロップするだけで済むパターンがあるかどうかを知りたいです。ほとんどの場合、管理セクションに移動して、新しいクレジット カードの実装に関する詳細を入力する必要があります。
例: アプリケーションが現在 Authorize.net をサポートしているとします。したがって、すべてのユーザーが authorize.net を使用しています。ここで、新しい実装をコーディングして .jar ファイルをドロップし、admin に移動して、新しいクレジット カード プロバイダーを登録します。
これで、ユーザーはシステムにログインして、新しい実装を使用することを選択できます。
これは、再コンパイルすることなく実行できますか? 春のDIはこれに役立ちますか?
plugins - 柔軟なプラグイン アーキテクチャを作成するには?
私の開発作業で繰り返されるテーマは、社内プラグイン アーキテクチャの使用または作成です。構成ファイル (XML、.conf など)、継承フレームワーク、データベース情報、ライブラリなど、さまざまな方法でアプローチするのを見てきました。私の経験では:
- データベースは、構成情報を保存するのに最適な場所ではありません。特に、データが混在している場合はそうです。
- 継承階層でこれを試みるには、コーディングするプラグインに関する知識が必要です。つまり、プラグイン アーキテクチャはそれほど動的ではありません。
- 構成ファイルは単純な情報を提供するのには適していますが、より複雑な動作を処理することはできません
- ライブラリはうまく機能しているように見えますが、一方向の依存関係は慎重に作成する必要があります。
私は、これまで取り組んできたさまざまなアーキテクチャから学びたいと考えているため、コミュニティからの提案も求めています。SOLID プラグイン アーキテクチャをどのように実装しましたか? あなたの最悪の失敗 (またはあなたが見た最悪の失敗) は何ですか? 新しいプラグイン アーキテクチャを実装する場合、どうしますか? あなたが関わった SDK またはオープン ソース プロジェクトには、優れたアーキテクチャの最良の例がありますか?
私が自分で見つけたいくつかの例:
- Perl のModule::PlugableとPerl での依存性注入のためのIOC
- 依存性注入のためのさまざまな Spring フレームワーク(Java、.NET、Python)。
- Javaのリストを含むSO の質問( Service Provider Interfacesを含む)
- Dr. Dobbsの記事を指している C++のSO の質問
- ASP.NET MVC の特定のプラグインのアイデアに関するSO の質問
これらの例は、さまざまな言語の強みを発揮しているようです。優れたプラグイン アーキテクチャは必ず言語に結び付けられていますか? ツールを使用してプラグイン アーキテクチャを作成するのが最善ですか、それとも独自の次のモデルで行うのが最善ですか?
events - プラグインを作成し、イベントを公開する
プラグインユーザーにイベントを公開するにはどうすればよいですか?
私は使用する必要があることを知っています:
イベントをトリガーしますが、プラグインでイベントを宣言して呼び出す方法を説明するベストプラクティスを探しています。
c# - C#DLLのプラグイン-アーキテクチャ
基本的なプラグインアーキテクチャを使用するために開発したプログラムがあります。事実上、プログラムがロードされると、リフレクションを使用して、特定のインターフェイスに適合するdllをディレクトリで検索し、それらをロードします。現在使用されるプラグインのリストがすべてであるように見えます。
したがって、dllファイルをチェックする私の現在の慣行はまだベストプラクティスですか、それとも各dllをロードするためのより良い方法がありますか?
ありがとう。
jquery - 範囲指定された CSS のリセット
ページに適切な量の HTML を動的にレンダリングする jQuery プラグインがあります。プラグインの消費者がプラグインをそのまま使用できるようにし、どの CSS スタイルを使用していても同じように見えるようにしたいと考えています。
したがって、「スコープ付き」の CSS リセットが必要です。つまり、プラグイン div 内で何かを言う機能は、所有者の CSS の影響を受けてはなりません。
これで明らかに、このスコープ内で使用するすべての HTML 要素をリセットできますが、あまり洗練されていないように見えます。他の誰かがこれを処理する方法はありますか?
c# - プラグインアーキテクチャの実装-ダイナミックDLLのロード
私は基本的に、コントロールを使用してページをデザインできるプリロードされたコントロールを備えたデザイナーであるアプリケーションを持っています。
今後、さらに多くのコントロールをリリースする予定です。新しく追加されたコントロールの新しいビルドには欠点があるため、リリースしたくありません。だから私はアドオン/プラグインのようなアーキテクチャを考えていました。アドオン/プラグインを個別にリリースするだけで、デザイナー内にインストールしてコントロールを取得できます。
現在、コントロール、動作、スタイルなどを指定するためのアドオンとしてxmlファイルを使用しています。各xml(アドオン)は単一のコントロールを表します。しかし、すべてのプラグインを読み取るための汎用パーサーを作成する必要があるため、これを実装するのは非常に難しいと感じています。
代わりに、アドオンごとにdllをリリースして、コントロールの動作/外観を定義し、メインエンジンを介して動的にロードするコードを記述するためのより多くのコントロールを提供できますか?もしそうなら、どうすればdllをチェックしてアプリケーションに動的にロードできますか?
python - プラグインの設計に関する質問
私のプログラムは2つの部分に分かれています。ユーザーインターフェイスやその他の「メインプログラム」を処理するエンジンと、特定の入力を処理するメソッドを提供するプラグインのセットです。
各プラグインは独自のモジュールで記述されており、プラグインとの間でデータを送受信できるようにする関数を提供します。
この関数の名前はすべてのプラグインで同じなので、必要なのはどれを呼び出すかを決定することだけです。そうすれば、プラグインが残りを処理します。
すべてのプラグインをサブフォルダーに配置し、__ init__.py
各プラグインをインポートするを作成してから、フォルダーをインポートします(パッケージと呼ばれると思いますか?)
とにかく現在、私は何をインポートするかを明示的に指示しています(これは基本的に「これをインポートする」、「それをインポートする」です)。プラグインであるそのフォルダー内のすべてをインポートして、initファイルを編集せずにプラグインを追加できるようにする方法はありますか?
java - 階層化されたJavaEEアプリケーションでプラグインシステムを設計するにはどうすればよいですか?
JavaEEベースのRESTAPIアプリケーションがあります。次のような階層化アーキテクチャがあります。
- リソース(Jax-rsリソース)
- オブジェクトの検証
- オブジェクトマッパー
- サービスレイヤー
- リポジトリレイヤー
- JPAエンティティ
すべてがSpring依存性注入を使用して配線されています。
このコアアプリケーションは、他の外部開発者が拡張機能/プラグインを記述し、コアのマイナーまたはメジャー機能をオーバーライドまたは拡張できるように設計する必要があります。それが役立つのであれば、JavaEEのWordpressCMSのように考えてください。現在のアーキテクチャを中心にプラグインシステムをどのように設計しますか?
私が考えることができる明白な方法の1つは、適切なリソース(検証、objectmapperを使用)、サービス、リポジトリ、およびエンティティに新しい機能をオーバーライドまたは追加し、そこからjar+xmlを作成することです。ただし、プラグイン開発者は、コアコードのマッシュを再利用しながら、新しい機能を機能させるために最小限のコードを記述しなければならないことを確認したいと思います。
コアにまだ存在しないいくつかの追加フィールドを使用してブログ投稿を作成できるワードプレスのブログ投稿拡張機能を作成するとします。プラグイン/拡張機能の開発者にとって簡単な、現在のJava EEアプリの設計を行うための最も簡単でクリーンな方法は何でしょうか?戦略やテンプレートメソッドパターンのように役立つパターンはありますか?
Spring / JPAと標準テクノロジーを使用したモデルに従うオープンソースのJavaCMSはありますか?
c# - ASP.Net Webアプリのアーキテクチャを定義するのに助けが必要ですか?
ゼロから構築するプロジェクトを手に入れました。そのフロントエンドはASP.Netで、バックエンドはSQL 2008です。要件は、スマートフォンなどのハンドヘルドデバイスとして、任意のコンピューター(デスクトップ、ラップトップ、ネットブック)からアプリにアクセスできるようにするためのアプリのアーキテクチャである必要があります。 、PDA、タブレット。また、FBやorkutのように本質的にプラグイン可能である必要があります。つまり、将来、クライアントがゲームやサードパーティのアプリケーションを接続する必要がある場合は、全体を書き直さずにプラグインする必要があります。また、クライアントは、ツールキットまたはJQueryのいずれかを使用してWeb全体をajax化する必要があります。
階層型アーキテクチャを使用したASP.NetWebフォームアプリケーションの経験があります。そこで今回は、彼のすべてのニーズを維持しながら、WCFサービスを備えたWebアプリを考えています。しかし、SOAとMVC(3つすべて)を使用したプラグイン可能なアーキテクチャーについては、私にはわかりません。私がすべてのものを実装すると、それはコードの巨大なものになるでしょう。プラグ可能なアーチについては、グーグルで検索し、codeplexでMEFを見つけました。だからついに私は次のことを思いついた:
- ASP.Net MVC
- MEF
- JQuery
- WCF
- AJAXでRESTful
- XML
みんな、私は本当にあなたの助けが必要です、私はこれらすべてのものを一緒に置く方法を考えることができません。または、あなたが提案できる他の最良の選択肢はありますか?
また、クライアントによるもう1つの要件は、緩い結合コードが必要なことです。これが、MVCを選択した理由です。aspxページにはコントロールのみを含めることができ、必要なHTML、検証、およびその他のコードは、のビジネスレイヤーで実行する必要があります。アプリ。
それは大きな助けになります。