2012-03-07 11 views
1

Patterns For Large-Scale JavaScript Application ArchitectureNicholas Zakas: Scalable JavaScript Application Architectureのアイデアに従って、私はこのアーキテクチャを使用して大学ライセンスプロジェクトを実装し始めました。モジュールサンドボックスコアJavascriptパターンの深い分離

私はどのように進めるべきかが不明な状況に遭遇しました。このシナリオを説明するために、私は固体の例を提供しようとします:

私はCOREを介して開始される2つのモジュールを持っています。それらはそれぞれサンドボックスインスタンスを取得する正当なモジュールです。 1つのモジュールは管理領域のダッシュボードのメインコンテンツを表示し、もう1つは管理領域のユーザープロファイルのメインコンテンツを表示します。

enter image description here

両方のモジュールは、サーバからのAjaxを介してコンテンツを取得するためにサンドボックスを使用しています。これは、不明な点が浮かび上がる場所です。どちらのモジュールも、小さくはあるが目立つ共通点があります。現在ログインしているユーザーに関するいくつかのデータを表示する小さなユーザー統計部。

このデザインパターンでは、モジュールはサンドボックスとは別の依存関係を持つべきではないことを示しています。しかし、User Statistics Mini Moduleは、DashboardとUser Profileの両方の大型モジュールで使用されるスタンドアロンコンポーネントであることは明らかです。

私の質問は、ユーザー統計ミニモジュールをダッシュ​​ボードとプロファイルの大きなモジュールにどのように公開するのですか?

答えて

2

モジュールはとにかく相互作用する必要があります。パターンの考え方はこの相互作用を切り離すことであり、直接対話するべきではありませんが、サブスクライブ/パブリッシュイベントを使用してコアメディエーターを通じて行うべきです。

たとえば、 displayUserStatsダッシュボードモジュールに追加データを追加してイベントをサブモジュールに登録します。

+0

私はミニモジュールをスタンドアロンモジュールとして見なければなりません。依然として明確化が必要なことは、Domコンテンツのレンダリングです。ダッシュボードとユーザープロファイルには異なるHTMLテンプレートがあり、ユーザー統計は大きなモジュール内の別の場所でレンダリングされます。 : - ? –

+0

さて、あなたはモジュールを少し強く組み合わせて、 'Core.getModule'関数を作成することができます。とにかく、テンプレートをレンダリングするので、部分的なテンプレートレンダリングを別のモジュール/関数に委譲する方法が必要です。これはイベントでも行うことができます。 – kirilloid

+0

Core.getModuleは私が考えていた最初のアイデアでした...私のサンドボックスはDOMターゲットをパラメータの1つとしてインスタンス化され、ターゲットDOMノード内でのみ追加が行われます。私は私の答えを見つけた! :)私はgetModuleを使用し、ミニモジュールのターゲットをinMemoryで作成したターゲットにすることができます。テンプレートにコンテンツを追加するときに大きなモジュールが使用します。 –