8

Google にログインすると、Google ホームページは他の複数のサービス (Gmail、Play、Drive など) にリンクします。

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

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

編集

Firebug を調べてみたところ、メニューバーとアプリケーションの間に双方向の関係があるようです。メニューバーには各アプリケーションへのリンクがありますが、各アプリケーションにはメニュー バーも含まれています。

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

では、Google は UI でこれをどのように行うのでしょうか? メニューバーが各アプリケーションに挿入されているため、JavaScriptの魔法が行われているようです。

4

3 に答える 3

3

Google はUI 部分に独自のClosure Libraryを使用しています。

クロージャ ライブラリとは何ですか?

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

[...]

Closure Library を使用するのは誰ですか?

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

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

于 2012-10-20T12:23:32.790 に答える
3

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

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

リンクはこちら

于 2013-01-25T13:57:48.323 に答える
1

グーグルについては言えませんが、私は同じようなことをするウェブサイトに取り組んできました。一例では、世界中にオフィスを持つ大規模な不動産会社のWebサイトであり、ホームページ(および他のページ)には国固有のコンテンツを表示するカルーセルが含まれ、すべてのオフィスが同じCMSの異なるインスタンスを使用していました。自分のコンテンツを管理します。

何が起こるかというと、CMS(.NETベース)はカスタムおよびユーザーコントロール(.ascx)ファイルを使用して最終的なaspxページをレンダリングしました。これらのascxファイル(ヘッダー、フッター、カルーセル用)、これらのファイルに関連するすべてのスタイルとjavascript(慣例に従って_CSSおよび_JSと呼ばれる操作できないフォルダーに配置)は一元的に維持され、すべてのローカルWebサイトに複製されます。

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

写真の最後の部分は、これらすべての同期を維持することです。これらの共通コンポーネントをすべてのサーバーと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()
    {

    }
}
于 2012-10-20T12:17:46.720 に答える