2012-07-16 2 views
8

Quando si accede a Google, la home page di Google si collega a molti altri servizi (ad esempio Gmail, Play, Drive).goa's architecture - Aggregazione dei contenuti per l'interfaccia utente web di google

D1) Esiste uno schema SOA che descrive il modo in cui accoppiano le UI per ciascun servizio in modo approssimativo, ma allo stesso tempo fornisce anche una barra dei menu standard, un aspetto standard e un unico accesso attraverso le loro applicazioni?

Q2) Esiste qualche documentazione disponibile che descriva la loro architettura per collegare il contenuto dell'interfaccia utente?

Modifica

ho dato un'occhiata con Firebug e sembra che ci sia una relazione bidirezionale fra la barra dei menu e l'applicazione. La barra dei menu ha un link per ogni applicazione, ma ogni applicazione ha anche la barra dei menu inclusa.

Posso riferirlo all'interfaccia utente eclipse, in cui un'applicazione può contribuire al menu dell'applicazione, ma ogni menu è inserito nel contesto dell'applicazione Eclipse che aggrega tutti i plugin dell'interfaccia utente separati.

Così come fa Google fare questo nella loro interfaccia utente? Sembra che ci sia un po 'di magia javascript in corso, con la barra dei menu viene iniettato in ogni applicazione.

+0

Non abbastanza chiaro su ciò che si sta chiedendo qui, la prego di chiarire o restringere il campo? Le tue domande sembrano concentrarsi sull'interfaccia utente, ma è proprio questo ciò che desideri? Basta eseguire Firebug e tracciare quali file vengono scaricati ed eseguiti rivela molto su dove vengono caricate le risorse dell'interfaccia utente. Ci sono anche diversi articoli pubblicati (sia da Google che da altri) sulla loro soluzione single-sign-on. –

+0

Sono d'accordo con David, le domande sono buoni candidati per scrivere un libro piuttosto che per dare una risposta alla domanda. –

+0

Ho modificato la domanda, si spera che ora sia un po 'più precisa? –

risposta

1

Non posso dire di Google, ma ho lavorato su siti web che fanno cose simili. In un esempio, era un sito web per una grande agenzia immobiliare che ha uffici in tutto il mondo, la home page (e altre pagine) comprendono una giostra che consente di visualizzare contenuti specifici per il paese, tutti gli uffici utilizzate diverse istanze dello stesso CMS gestire i propri contenuti.

Quello che succede è che il CMS (basato su .NET) ha usato i file di controlli personalizzati (.ascx) per rendere la pagina finale di aspx. Questi file ascx (per l'intestazione, piè di pagina e carousel), tutti gli stili e javascript relativi a tali file (messo in una cartella che non può essere manipolata chiamata _CSS e _JS come per la nostra convenzione) sono mantenute in posizione centrale e poi replicata in tutti i siti web locali .

L'istanza CMS, specifica per un ufficio nazionale, creerà quindi le proprie pagine ma tutte utilizzano intestazioni e piè di pagina comuni forniti dall'applicazione centrale.

L'ultimo pezzo dell'immagine è di mantenere tutto questo in sincrono, è necessario un qualche tipo di agente o servizio per propagare questi componenti comuni a tutti i server e le istanze CMS per assicurarsi che tutti usino lo stesso controlli, stili e javascript (stili e javascript potrebbe essere fatto riferimento centrale, ma il controllo utente personalizzato bisogno di vivere all'interno del dominio applicazione della specifica CMS almeno per NET). Abbiamo usato Repliweb per tali compiti ma non ho molta familiarità con i dettagli.

Dal punto di vista architettonico, lo vedo come una specie di architettura di plugin per l'interfaccia utente, quindi hai ragione a metterlo in relazione con l'architettura di Eclipse. Il CMS centrale è un tipo astratto che fornisce un'interfaccia a cui specifiche istanze del sito devono aderire e implementarlo.

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

Questo è fantastico. Hai un'idea di come si chiama il pattern o che potresti chiamare? Forse "UI Contribution Pattern"? Una volta che questo modello ha un nome, sarà più facile mostrare approcci da altre aree, ad esempio: [virgo snaps] (http://www.eclipse.org/virgo/documentation/virgo-documentation-3.5.0.RELEASE/ docs/snaps-guide/htmlsingle/virgo-snaps-guide.html), o [maven war overlay] (http://maven.apache.org/plugins/maven-war-plugin/overlays.html) –

+1

Lo considero un modello di plugin. Da MSDN: il pattern plug-in è un pattern che estende il comportamento di una classe consentendo alle estensioni di inserirsi in una classe astratta che, a sua volta, si inserisce in una classe principale. Ciò crea una nuova sottoclasse che include solo le funzionalità richieste nel contesto specifico. – kabaros

+0

Dovrebbe essere possibile ottenere lo stesso risultato finale con linguaggi non di classe, quindi non vorrei eliminare questi approcci dalla discussione. Che ne dici di "UI Plug-in pattern"? –

3

Google utilizza proprio Closure Library per la parte di interfaccia utente:

Qual è la Biblioteca di chiusura?

La libreria di chiusura è una libreria JavaScript cross-browser ampia, ben collaudata, modulare e . È possibile estrarre solo ciò che è necessario da una vasta serie di widget e controlli UI riutilizzabili e da utilità di livello inferiore per manipolazione DOM, comunicazione server, animazione, dati strutture, test unità, modifica rich text e altro.

[...]

Chi usa Chiusura Biblioteca?

ricerca, Gmail, Maps, Docs, Sites, Libri, Reader, Blogger, Calendar, Google+, foto

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

3

Il progetto hawt.io ha un approccio interessante:

hawtio è altamente modulare, in modo che possa scoprire esattamente quali servizi si trovano all'interno di una JVM e aggiornare dinamicamente la console per fornire un'interfaccia ad essi.

Il collegamento è here