2012-07-16 55 views
8

登錄Google時,Google首頁鏈接到多個其他服務(例如Gmail,Play,Drive)。谷歌的soa架構 - 爲谷歌的網絡用戶界面彙總內容

Q1)是否有SOA模式描述了它們鬆散地將每個服務的UI連接起來的方式,但同時還在其應用程序中提供標準菜單欄,標準外觀和單點登錄? Q2)是否有任何可用的文檔描述了用於鏈接UI內容的體系結構?

編輯

我已使用Firebug一看,它好像有菜單欄和應用程序之間的雙向關係。菜單欄有一個鏈接到每個應用程序,但每個應用程序也包含菜單欄。

我可以將此與eclipse用戶界面關聯起來,其中應用程序可以對應用程序菜單作出貢獻,但每個菜單都位於eclipse應用程序的上下文中,該應用程序聚合所有單獨的UI插件。

那麼谷歌如何在他們的UI中做到這一點?它看起來像有一些JavaScript巫術正在進行,菜單欄被注入到每個應用程序中。

+0

而不是你在這裏問什麼很清楚,可以請你澄清或縮小它?你的問題似乎集中在用戶界面上,但這真的是你想要的嗎?只要運行Firebug並跟蹤下載和執行的文件,就會發現很多關於用戶界面資源從哪裏加載的信息。 Google和其他人也發表了幾篇關於他們的單點登錄解決方案的論文。 – 2012-10-15 23:39:41

+0

我同意戴維的觀點,這些問題是編寫一本書的好人選,而不是給出一個令人滿意的答案。 – 2012-10-16 06:26:58

+0

我編輯了這個問題,希望現在有點更精確? – 2012-10-16 06:30:33

回答

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() 
    { 

    } 
} 
+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) – 2012-10-21 09:31:45

+1

我認爲它一個插件模式。從MSDN開始:插件模式是一種模式,它通過允許擴展插入抽象類來擴展類的行爲,而抽象類又插入到核心類中。這將創建一個僅包含特定上下文中所需功能的新子類。 – kabaros 2012-10-21 09:36:04

+0

它應該有可能用非基於類的語言實現相同的最終結果,所以我不想從討論中消除這些方法。 「UI插件模式」如何? – 2012-10-21 09:43:05

3

谷歌使用自己的Closure Library的UI部分:

什麼是Closure庫?

Closure Library是一個跨瀏覽器的JavaScript庫,它是一個廣泛的,經過充分測試的,模塊化的和 。您可以從 中抽取一大組可重複使用的UI小部件和控件,以及從DOM操作,服務器通信,動畫,數據結構,單元測試,富文本編輯等更低級別的實用工具中抽取您需要的內容。

[...]

誰使用Closure庫?

搜索,Gmail,地圖,文件,網站,書籍, 閱讀器,Blogger,Google日曆,Google +和照片

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

3

的hawt.io項目有一個有趣的方法:

hawtio是高度模塊化的,因此它可以準確地發現JVM內部的服務,並動態更新控制檯以向它們提供接口。

的聯繫是here