8

登录到 Google 后,Google 主页会链接到多个其他服务(例如 Gmail、Play、Drive)。

Q1) 是否有一种 SOA 模式描述了它们松散耦合每个服务的 UI 的方式,但同时还提供标准菜单栏、标准外观和跨应用程序的单点登录?

Q2) 是否有任何可用的文档来描述他们用于链接 UI 内容的架构?

编辑

我查看了 Firebug,似乎菜单栏和应用程序之间存在双向关系。菜单栏有一个指向每个应用程序的链接,但每个应用程序也包含菜单栏。

我可以将其与eclipse UI 联系起来,其中应用程序可以为应用程序菜单做出贡献,但每个菜单都存在于 eclipse 应用程序的上下文中,该应用程序聚合了所有单独的 UI 插件。

那么谷歌是如何在他们的用户界面中做到这一点的呢?看起来有一些 javascript 魔法正在进行,菜单栏被注入到每个应用程序中。

4

3 回答 3

3

Google为 UI 部分使用了自己的Closure 库:

什么是闭包库?

闭包库是一个广泛的、经过良好测试的、模块化的、跨浏览器的 JavaScript 库。您可以从大量可重用的 UI 小部件和控件以及用于 DOM 操作、服务器通信、动画、数据结构、单元测试、富文本编辑等的低级实用程序中提取所需的内容。

[...]

谁使用闭包库?

搜索、Gmail、地图、文档、网站、图书、阅读器、Blogger、日历、Google+、照片

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

于 2012-10-20T12:23:32.790 回答
3

hawt.io 项目有一个有趣的方法:

hawtio 是高度模块化的,因此它可以准确地发现 JVM 中的服务,并动态更新控制台以向它们提供接口。

链接在这里

于 2013-01-25T13:57:48.323 回答
1

我不知道谷歌,但我曾在做类似事情的网站上工作过。例如,它是一家大型房地产机构的网站,该机构在世界各地设有办事处,主页(和其他页面)包括一个显示特定国家/地区内容的轮播,所有办事处都使用相同 CMS 的不同实例管理自己的内容。

发生的情况是 CMS(基于 .NET)使用自定义和用户控件 (.ascx) 文件来呈现最终的 aspx 页面。这些 ascx 文件(用于页眉、页脚和轮播)、与这些文件相关的所有样式和 javascript(按照我们的约定放在一个无法操作的名为 _CSS 和 _JS 的文件夹中)集中维护,然后复制到所有本地网站.

CMS 实例 - 特定于一个国家办事处 - 然后将创建自己的页面,但它们都使用中央应用程序提供的这些通用页眉和页脚。

最后一张图是让所有这些保持同步,您需要某种代理或服务将这些公共组件传播到所有服务器和 CMS 实例,以确保它们都使用相同的控件、样式和javascript(可以集中引用样式和 javascript,但自定义用户控件需要存在于特定 CMS 的应用程序域中,至少对于 .NET)。我们将 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 回答