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