完全にモジュール化されたWebアプリケーションを構築する方法[非公開]


34

今後数か月で、クライアント用に構築したシステム(v1)を取得し、ゼロから再構築するプロジェクトを開始します。v2の目標は、この特定のクライアントが使用する独自のモジュールセットを持ち、別のクライアントが異なるモジュールセットを完全に使用できるようにモジュール化することです。ここでのコツは、会社Aがそのシステムの動作を変更する一連のチェックアウトおよびユーザーモジュールを持っている可能性があることです。会社Bは、標準のチェックアウト手順に固執するかもしれませんが、製品の閲覧方法をカスタマイズします。

アプリケーションをゼロから構築しCore、すべてのクライアントで共有したい一方で、クライアント専用に変更するものの柔軟性を維持したい場合、アプリケーションアーキテクチャへの良いアプローチは何ですか?

CodeIgniterのフックを見たことがありますが、250のフックになる可能性があり、まだ十分な柔軟性がないため、これは良い解決策ではないと思います。他のソリューションは何ですか?理想的には、砂の中に線を引く必要はありません。

回答:


26

高度に組織化され、分離されたモジュール性を実現するには、プレゼンテーション-抽象化-制御とも呼ばれる階層MVCアーキテクチャパターンに従うことができます(厳密には同じパターンではありません)。KohanaAlloyFluencyFuelPHPは HMVCをネイティブにサポートしています* KohanaのHMVCアプローチについては、Sam de FreyssinetによるHMVCによるWebアプリケーションのスケーリングHMVC Webアプリケーションのパフォーマンスの最適化説明されています。

残念ながら、CodeIgniterはHMVCをネイティブにサポートしていません。wiredesignzのcodeigniter-modular-extensions-hmvcからインスピレーションを得て、CodeIgniterで何らかのHMVCサポートを提供する独自のライブラリを構築しました。nettus +のHMVCの記事には、CodeIgniterとwiredesignzの拡張機能についての非常に素晴らしい紹介があります。次の画像と引用は、そのチュートリアルからのものです。

ここに画像の説明を入力してください

各トライアドは互いに独立して機能します。トライアドは、コントローラーを介して別のトライアドへのアクセスを要求できます。これらの両方のポイントにより、必要に応じて、アプリケーションを複数の場所に分散できます。さらに、MVCトライアドの階層化により、より深みのある堅牢なアプリケーション開発が可能になります。これはいくつかの利点につながり、次のポイントにつながります。

最後に、HMVCアーキテクチャを採用している場合でも、フックの正しい軌道に乗っています。実装と探している自動化のレベルによっては、フックで解決する必要がある問題がいくつかあります。 。フックの適切な使用法はpre_controller、たとえば、インストールされたモジュールのすべての依存関係が存在することを確認するフックです。

*知らない人がいるかもしれません。


1
ASP.NET MVCはこれをサポートしていますか?
ロバートハーベイ

私は見当がつかない@RobertHarvey ...
ヤニス

@Robert Harvey私には、これはフレームワークというよりもパターンのように思えます。何かが足りないかもしれませんが、ASP.NET MVCの継承でこれができない理由がわかりません。
ジェレミー

3
@Jeremy:特にビューの一部を再利用したい場合は、ビューでトリッキーになります。興味をそそられるように見えますが、ナットとボルトのレベルで視覚化するのは難しいと感じています。
ロバートハーヴェイ

上の図では、上位レベルのビューが、階層の下位にある小さなビューから構成されているように見えます。それはすでにある程度まで行うことができますRenderAction()
ロバートハーベイ

5

私はPHPの男ではありませんが、Javaスクリプト側では、可能な限り独立させたいモジュールがたくさんある場合、Javaスクリプトを備えたRequireJSなどのシステムがいくつかあります他のモジュールへの依存関係を宣言するモジュール。フレームワークは、必要なときにそれらが確実にロードされるようにします。

さまざまなフレームワークは、依存関係の宣言方法、サーバーでのビルドステップとして、ページの読み込み時、または要求に応じて動的に行われる依存関係処理の程度、およびJava-スクリプト。

これらのフレームワークは、サーバー側フレームワークがこれを処理するか、Javaスクリプトを生成している場合、あまり(またはおそらくまったく)適用されませんが、Javaスクリプトをサーバー側フレームワークから独立させたい場合があります。

java-scriptがあまりないのにモジュール性が必要な場合は、スクリプトタグを最初に依存関係で順序付け、依存関係を処理する匿名の自己呼び出し関数に固執して、グローバル名前空間。それは少なくともそれらをほぼモジュール化し、実装するのにそれほど費用はかかりません。


0

モジュール設計を行う方法に関するいくつかの指示は次のとおりです。https : //class.coursera.org/saas/lecture/preview/9

また、「SOAは、分散コンピューティングとモジュールプログラミングの古い概念からSOAを経て、マッシュアップ、SaaSの現在の実践まで、連続して見ることができます...」

HMVCコードの編成自体は、必ずしもモジュール性につながるとは限りません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.