モジュール化されたアプリケーションを作成する場合の最適なリソースは何ですか? [閉まっている]
-
03-07-2019 - |
質問
Drupal、Wordpress、Salesforceなどの新しいWebプラットフォーム/アプリケーションの私の分析では、それらの多くはモジュール化の概念に基づいてソフトウェアを作成しています。 「コア」リード開発者が管理するシステム。特に、Drupalは「フック」を使用することを知っています。システムですが、それを実装するエンジンや設計についてはあまり知りません。
アプリケーションを作成する道をたどり、モジュール化が可能なシステムが必要な場合、どこから始めますか?これは誰もが知っている特定のデザインパターンですか?このパラダイムが購読する傾向があるハンドブックはありますか?この種の開発についてゼロから議論しているウェブサイトはありますか?
OOPを直接指摘する人もいますが、それはまったく同じではないようです。
私が計画しているこの特定のシステムは、Salesforceのようなものに傾いていますが、CRMシステムではありません。
質問のために、購入とビルドの議論を無視してください。その検討はすでに進行中です。現在、ビルドの側面を調査しています。
解決
ここを回避するには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
これはすべて、ハリウッドの原則にも関連しています。 、しかし、時には実用的ではありません。
他のヒント
これはコンポーネントアーキテクチャと呼ばれます。本当に大きなエリアですが、ここで重要なことは次のとおりです。
- コンポーネントの構成(コンテナコンポーネントには他のコンポーネントを含めることができます)
- たとえば、グリッドには他のグリッドまたは他のコンポーネントを含めることができるはずです
- インターフェースによるプログラミング(コンポーネントは既知のインターフェースを介して相互作用します)
- たとえば、コンポーネントにそれ自体をレンダリングするように要求するビューシステム(たとえば、HTMLで、またはレンダリング領域に渡され、ビューに直接描画するように要求する場合があります)
- 動的レジストリの広範な使用(プラグインがロードされると、プラグインは適切なレジストリに自身を登録します)
- イベントをコンポーネントに渡すシステム(マウスクリック、カーソル入力など)
- 通知
- ユーザー管理
その他多数!
アプリケーションをホストしている場合は、RESTful APIを公開(およびドッグフード)します。
ソフトウェアを配布する場合は、 OSGi をご覧ください。
これは、少なくともいくつかのヒントを提供する小さなビデオです。 レゴプロセス [2分未満]
モジュール化に基づいて独自のフレームワークを作成する方法の完全なレシピもあります...
モジュール化されたソフトウェアを作成するための最も重要な重要な要素は、純粋に[ほとんど]システムを作成できる疎結合の問題であることを覚えておくことです。疎結合であるほど、モジュール化が容易になります...