2012-07-16 9 views
8

Po zalogowaniu się do Google strona główna Google łączy się z wieloma innymi usługami (np. Gmail, Play, Dysk).Architektura Google Goo - gromadzenie treści dla internetowego interfejsu użytkownika Google

Q1) Czy istnieje wzorzec SOA, który opisuje sposób, w jaki luźno łączy interfejsy dla każdej usługi, ale jednocześnie zapewnia standardowy pasek menu, standardowy wygląd i styl oraz pojedyncze logowanie w swoich aplikacjach?

Q2) Czy dostępna jest dokumentacja opisująca ich architekturę do łączenia zawartości interfejsu użytkownika?

Edit

Brałem spojrzeć z Firebug i wydaje się, że istnieje związek pomiędzy dwukierunkowy paska menu i aplikacji. Pasek menu zawiera odsyłacz do każdej aplikacji, ale każda aplikacja ma również pasek menu.

Mogę to odnieść do interfejsu użytkownika eclipse, w którym aplikacja może wnieść wkład do menu aplikacji, ale każde menu funkcjonuje w kontekście aplikacji eclipse, która agreguje wszystkie oddzielne wtyczki interfejsu użytkownika.

Jak Google robi to w swoim interfejsie użytkownika? Wygląda na to, że jest trochę magii javascript, a pasek menu jest wstrzykiwany do każdej aplikacji.

+0

Nie całkiem jasne, na co prosicie tutaj, czy mógłbyś wyjaśnić lub sprowadzić? Twoje pytania wydają się skupiać na interfejsie użytkownika, ale czy to naprawdę jest to, czego chcesz? Po prostu uruchomienie Firebug i śledzenie, jakie pliki są pobierane i wykonywane, ujawnia wiele informacji o tym, skąd są pobierane zasoby interfejsu użytkownika. Istnieje również kilka artykułów opublikowanych (zarówno przez Google, jak i inne) na temat rozwiązania z jednym znakiem. –

+0

Zgadzam się z Davidem, pytania są dobrymi kandydatami do napisania książki, a nie do rzetelnej, trafnej odpowiedzi. –

+0

Edytowałem pytanie, mam nadzieję, że teraz jest ono nieco bardziej precyzyjne? –

Odpowiedz

1

Nie mogę powiedzieć o Google, ale pracowałem nad witrynami, które robią podobne rzeczy. W jednym z przykładów była to strona internetowa dla dużej agencji nieruchomości, która ma biura na całym świecie, strona główna (i inne strony) zawiera karuzelę, która wyświetla treść specyficzną dla kraju, wszystkie biura używały różnych instancji tego samego CMSa zarządzać własnymi treściami.

Co się dzieje, że system CMS (oparty na .NET) używał niestandardowych i kontrolek użytkownika (.ascx) do renderowania końcowej strony aspx. Te pliki ascx (dla nagłówka, stopki i karuzeli), wszystkie style i javascript powiązane z tymi plikami (umieszczane w folderze, który nie może być modyfikowany nazwany _CSS i _JS zgodnie z naszą konwencją) są utrzymywane centralnie, a następnie replikowane na wszystkie lokalne witryny .

Instancja CMS - specyficzna dla jednego urzędu krajowego - utworzy własne strony, ale wszystkie będą używać tych wspólnych nagłówków i stopek udostępnianych przez aplikację centralną.

Ostatnim elementem zdjęcia jest zachowanie synchronizacji, potrzebny jest jakiś agent lub usługa do propagowania tych wspólnych składników do wszystkich serwerów i instancji CMS, aby upewnić się, że wszystkie używają tego samego elementy sterujące, style i javascript (style i javascript można odnosić centralnie, ale niestandardowa kontrola użytkownika musi żyć w domenie aplikacji określonego CMS przynajmniej dla .NET). Używaliśmy Replieb do takich zadań, ale nie znam szczegółów.

Z architektonicznego punktu widzenia uważam, że jest to rodzaj architektury wtyczki dla interfejsu użytkownika, więc masz rację, odwołując się do architektury Eclipse. Centralny CMS jest abstrakcyjnym typem zapewniającym interfejs, który muszą stosować i wdrażać określone instancje witryny.

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

To jest świetne. Czy masz pojęcie, jaki wzorzec jest nazywany lub czy można go nazwać? Może "Wzór wkładu interfejsu użytkownika"? Gdy ten wzorzec ma nazwę, łatwiej będzie pokazać podejścia z innych obszarów, na przykład: [virgo snaps] (http://www.eclipse.org/virgo/documentation/virgo-documentation-3.5.0.RELEASE/ docs/snaps-guide/htmlsingle/virgo-snaps-guide.html) lub [maven war overlay] (http://maven.apache.org/plugins/maven-war-plugin/overlays.html) –

+1

Uważam to za wzór wtyczki. Z MSDN: Wzorzec wtyczki to wzorzec, który rozszerza zachowanie klasy, umożliwiając rozszerzeniom podłączanie do abstrakcyjnej klasy, która z kolei jest podłączana do klasy podstawowej. Tworzy to nową podklasę, która zawiera tylko funkcje wymagane w danym kontekście. – kabaros

+0

Powinno być możliwe osiągnięcie tego samego efektu końcowego przy użyciu języków innych niż klasowe, więc nie chciałbym wyeliminować tych podejść z dyskusji. Co powiesz na "Wzorzec wtyczki interfejsu użytkownika"? –

3

Google wykorzystuje własny Closure Library dla części UI:

Co jest Biblioteka Zamknięcie?

Biblioteka zamknięcia to szeroka, dobrze przetestowana, modułowa biblioteka skryptów JavaScript o różnych przeglądarkach i . Możesz pobrać tylko to, czego potrzebujesz od dużego zestawu widżetów i kontrolek wielokrotnego użytku UI oraz z narzędzi niższego poziomu do manipulacji DOM, komunikacji z serwerem, animacji, danych struktur, testowania jednostek, edycji tekstu formatowanego i innych.

[...]

Kto używa Zamknięcie biblioteki?

Search, Gmail, Mapy, Dokumenty, Witryny, Książki, Reader, Blogger, Kalendarz, Google+, Zdjęcia

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

3

Projekt hawt.io ma ciekawe podejście:

hawtio jest wysoce modułowy, dzięki czemu może dokładnie odkryć, jakie usługi znajdują się w JVM i dynamicznie aktualizować konsolę, aby zapewnić im interfejs.

Link jest here