2012-07-16 7 views
8

Googleにログインすると、Googleホームページは他の複数のサービス(Gmail、Play、ドライブなど)にリンクします。googleのsoaアーキテクチャ - Googleのウェブユーザーインターフェース用のコンテンツの集約

Q1)サービスごとにUIを疎結合する方法を説明するSOAパターンはありますか?同時に、アプリケーション全体で標準のメニューバー、標準的なルックアンドフィールとシングルサインオンを提供していますか?

Q2)UIコンテンツをリンクするためのアーキテクチャを説明する資料はありますか?

編集

私はFirebugので外観を撮影してきたし、メニューバーとアプリケーション間の双方向の関係があるように思えます。メニューバーには各アプリケーションへのリンクがありますが、各アプリケーションにはメニューバーもあります。

これは、アプリケーションがアプリケーションメニューに寄与できるが、各メニューは、別々のすべてのUIプラグインを集約するEclipseアプリケーションのコンテキスト内に存在するUIに関連付けられます。

GoogleのUIでこれをどのようにしていますか?いくつかのjavascriptの魔法があり、メニューバーが各アプリケーションに注入されているようです。

+0

非常に明確ではないが、あなたはそれを明確たり狭めてくださいだろうか?あなたの質問はユーザーインターフェイスに焦点を当てているようですが、これは本当にあなたが望むものですか? Firebugを実行して、ダウンロードされ実行されるファイルをトレースするだけで、ユーザーインターフェイスリソースがどこから読み込まれるかについて多くのことがわかります。また、Googleと他のユーザーの両方がシングルサインオンソリューションで公開している論文もいくつかあります。 –

+0

私はDavidに同意します。質問は、補足的なポイントツーポイントの回答ではなく、本を書く良い候補です。 –

+0

私は質問を編集しました、うまくいけば今はもう少し正確ですか? –

答えて

1

Googleについてはわかりませんが、私は似たようなことをするウェブサイトで働いています。 1つの例では、世界各地にオフィスを持つ大規模な不動産代理店向けのホームページで、ホームページ(および他のページ)には、その国に固有のコンテンツを表示するカルーセルが含まれ、すべてのオフィスで同じCMS自分のコンテンツを管理する

CMS(.NETベース)はカスタムおよびユーザーコントロール(.ascx)ファイルを使用して最終的なaspxページを表示します。これらのascxファイル(ヘッダー、フッター、カルーセル用)、それらのファイルに関連するすべてのスタイルとjavascript(私たちの規約に従って_CSSと_JSと呼ばれる操作できないフォルダに置かれます)は一元的に管理され、その後すべてのローカルWebサイト。

1つの拠点に固有のCMSインスタンスは、独自のページを作成しますが、すべて中央アプリケーションで提供されるこれらの共通ヘッダーとフッターを使用します。

最後の部分はすべてを同期しておくことです。これらの共通コンポーネントをすべてのサーバーとCMSインスタンスに伝播させて、すべて同じものを使用するようにするには、何らかの種類のエージェントまたはサービスが必要ですコントロール、スタイル、およびjavascript(スタイルとjavascriptは一元的に参照できますが、カスタムユーザーコントロールは少なくとも.NETの特定のCMSのアプリケーションドメイン内に存在する必要があります)。私たちはそのようなタスクのためにRepliwebを使用しましたが、私はその詳細をあまりよく知らない。

アーキテクチャ上、UIのプラグインアーキテクチャのように見えるので、Eclipseアーキテクチャに関連付けるのは正しいです。中央CMSは、特定のサイトインスタンスがそれを遵守し実装するためのインタフェースを提供する抽象型です。

abstract class GoogleSite 
{ 
    Control Header { get; set; } 
    Control Footer { get; set; } 

    public string Title { get { return "Default title"; } } 

    public abstract void ProvideContents(); 
} 

class Gmail: GoogleSite 
{ 
    //still using same header and footer but Title is different 
    override public string Title { get { return "Gmail"; } } 

    public override void ProvideContents() 
    { 

    } 
} 


class GPlus: CentralCMS 
{ 
    //Another CMS not overriding the title but Providing different contents 
    public override void ProvideContents() 
    { 

    } 
} 
+0

これは素晴らしいことです。どのようなパターンが呼ばれているのか、それとも呼び出せるのか考えていますか?たぶん "UI貢献パターン"?このパターンに名前が付くと、他の領域からのアプローチを表示する方が簡単になります。例:[virgo snaps](http://www.eclipse.org/virgo/documentation/virgo-documentation-3.5.0.RELEASE/ docs/snaps-guide/htmlsingle/virgo-snaps-guide.html)、または[maven war overlay](http://maven.apache.org/plugins/maven-war-plugin/overlays.html) –

+1

私はそれを考慮するプラグインパターン。 MSDNから:プラグインパターンは、エクステンションを抽象クラスにプラグインしてコアクラスにプラグインできるようにすることで、クラスの動作を拡張するパターンです。これにより、特定のコンテキストで必要な機能のみを含む新しいサブクラスが作成されます。 – kabaros

+0

非クラスベースの言語でも同じ最終結果を得ることができるはずですので、そのアプローチをディスカッションから除外したくありません。 「UIプラグインパターン」はどうですか? –

3

GoogleがUI部品のための独自のClosure Libraryを使用しています。

閉鎖ライブラリとは何ですか?

クローラライブラリは、幅広く、十分にテストされたモジュール式のクロスブラウザJavaScriptライブラリ です。 から、再利用可能なUIウィジェットとコントロール、DOM操作、サーバー通信、アニメーション、データ 構造、ユニットテスト、リッチテキスト編集などの下位レベルの ユーティリティから、必要なものだけを引き出すことができます。クロージャライブラリを使用しています

[...]

検索、Gmail、マップ、ドキュメント、サイト、本、 リーダー、ブロガー、カレンダーは、Google +は、写真

https://developers.google.com/closure/library/?hl=en

3

hawt.ioプロジェクトは興味深いアプローチがあります。

hawtioは高度にモジュール化されているため、JVM内のサービスを正確に検出し、コンソールを動的に更新してインターフェースを提供することができます。

リンクはあなたがここに求めているものにhere