4

Drupal、Wordpress、Salesforce などの新しい Web プラットフォーム/アプリケーションの私の分析では、それらの多くはモジュール化の概念に基づいてソフトウェアを作成しています。開発者は、「コア」のコードを変更する必要なく、新しい拡張機能やアプリケーションを作成できます。 " 主任開発者によって維持されているシステム。特に、Drupal が「フック」システムを使用していることは知っていますが、それを実装するエンジンや設計についてはあまり知りません。

アプリケーションを作成する道を進み、モジュール化を可能にするシステムが必要な場合、どこから始めますか? これは誰もが知っている特定のデザイン パターンですか? このパラダイムが購読する傾向があるハンドブックはありますか? この種の開発についてゼロから議論しているWebサイトはありますか?

一部の人々が OOP を直接指していることは知っていますが、それはまったく同じことではないようです。

私が計画しているこの特定のシステムは、Salesforce のようなものに傾いていますが、CRM システムではありません。

質問のために、Buy vs. Build の議論は無視してください。その検討はすでに進行中です。現在、ビルド面を研究中です。

4

5 に答える 5

6

ここで回避するには 2 つの方法があります。どちらを使用するかは、ソフトウェアの動作によって異なります。

1 つの方法はプラグインルートです。この ルートでは、新しいコードをアプリケーションにインストールして、関連する側面を変更できます。このルートでは、アプリケーションがインストール可能であり、サービスとして提供されるだけではありません (または、サードパーティから送信されたコードをインストールして確認する必要がある場合は、悪夢です)。

もう 1 つの方法は、APIを提供することです。これは関係者によって呼び出され、アプリケーションが他の場所にあるコードに制御を転送するようにする (Facebook アプリのように) か、API コマンドが開発者を有効にするようにアプリケーションを実行させる (Google のように)マップ)。

メカニズムはさまざまであり、実際に実装する方法も異なりますが、いずれにせよ、定義する必要があります

  • ユーザーにどのような自由を与えますか?
  • プログラマーがアプリケーションをカスタマイズするために、どのようなサービスを提供しますか?

そして最も重要なこと:

  • セキュリティと堅牢性を維持しながら、コードでこれを有効にする方法。これは通常、コードをサンドボックス化し、入力を検証し、制限された機能をユーザーに提供することによって行われます。

このコンテキストでは、フックは、登録されているすべてのプラグインのフック関数を呼び出すコード内の事前定義された場所であり、定義されている場合、アプリケーションの標準的な動作を変更します。たとえば、背景をレンダリングする関数がある場合は、

function renderBackground() {
    foreach (Plugin p in getRegisteredPlugins()) {
        if (p.rendersBackground) p.renderBackground();
    }
    //Standard background code if nothing got executed (or it still runs, 
    //according to needs)
}

この場合、背景を変更するためにプラグインが実装できる「renderBackground」フックがあります。

API の方法で、ユーザー アプリケーションはサービスを呼び出して背景をレンダリングします。

//other code
Background b = Salesforce2.AjaxRequest('getBackground',RGB(255,10,0));
//the app now has the result of calling you

これはすべてハリウッドの原則にも関連しており、適用するのは良いことですが、実際的でない場合もあります。

于 2009-01-05T14:48:21.443 に答える
1

EAA の Pからのプラグイン パターンは、おそらくあなたが求めているものです。実行時にアドホックにプラグイン (モジュール) を統合できるサービスのパブリック インターフェイスを作成します。

于 2009-01-05T14:41:37.383 に答える
1

これをコンポーネント アーキテクチャと呼びます。これは非常に大きな領域ですが、重要な点は次のとおりです。

  • コンポーネントの構成 (コンテナー コンポーネントには他のコンポーネントを含めることができます)
    • たとえば、グリッドには他のグリッドやその他のコンポーネントを含めることができる必要があります
  • インターフェースによるプログラミング (コンポーネントは既知のインターフェースを介して相互作用します)
    • たとえば、コンポーネントにそれ自体をレンダリングするように要求するビューシステム (HTML で言うか、レンダリング領域を渡されて、ビューに直接描画するように要求する可能性があります)
  • 動的レジストリーの広範な使用 (プラグインがロードされると、適切なレジストリーに自身を登録します)
  • コンポーネントにイベントを渡すためのシステム (マウス クリック、カーソルの入力など)
  • 通知
  • ユーザー管理

などなど!

于 2009-01-05T14:47:31.273 に答える
0

これは、少なくともいくつかのヒントを与える小さなビデオです。レゴプロセス[2分未満]

モジュール化に広範囲に基づいて独自のフレームワークを作成する方法の完全なレシピもあります...

モジュール化されたソフトウェアを作成するための最も重要な重要な要素は、それが純粋に[ほとんど]システムを作成するためにどれだけ緩く結合できるかという問題であることを覚えておくことです。結合が緩いほど、モジュール化が容易になります...

于 2009-08-10T17:03:03.057 に答える
0

アプリケーションをホストしている場合は、RESTful API を公開 (およびドッグフード) します。

ソフトウェアを配布している場合は、OSGiを見てください。

于 2009-01-05T14:28:03.247 に答える