谷歌'soa架构-为谷歌聚合内容'的web用户界面

google's soa architecture - Aggregating content for google's web user interface

本文关键字:谷歌 用户界面 web soa 架构      更新时间:2023-10-23

登录谷歌时,谷歌主页会链接到多个其他服务(如Gmail、Play、Drive)。

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

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

编辑

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

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

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

Google使用自己的闭包库作为UI部分:

什么是闭包库

闭包库是一个广泛的、经过良好测试的、模块化的跨浏览器JavaScript库。你可以从中提取你需要的东西一大组可重复使用的UI小部件和控件,并且来自较低级别用于DOM操作、服务器通信、动画、数据的实用程序结构、单元测试、富文本编辑等等。

[…]

谁使用闭包库

搜索,Gmail,地图,文档,网站,书籍,阅读器,博客,日历,Google+,照片

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

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

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

链接在这里

我不知道谷歌的情况,但我在做类似事情的网站上工作过。在一个例子中,它是一家在世界各地设有办事处的大型房地产机构的网站,主页(和其他页面)包括一个旋转木马,显示特定于该国的内容,所有办公室都使用同一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()
    {
    }
}