2012-07-16 12 views
8

Cuando inicia sesión en Google, la página principal de Google vincula a otros servicios (por ejemplo, Gmail, Play, Drive).arquitectura soa de google: agregación de contenido para la interfaz de usuario web de google

Q1) ¿Hay un patrón SOA que describa la forma en que acoplan las IU para cada servicio, pero al mismo tiempo proporcionan una barra de menú estándar, apariencia estándar y inicio de sesión único en todas sus aplicaciones?

Q2) ¿Hay alguna documentación disponible que describa su arquitectura para vincular el contenido de la interfaz de usuario?

Editar

yo he tomado una mirada con Firebug y parece que existe una relación bidireccional entre la barra de menús y la aplicación. La barra de menú tiene un enlace a cada aplicación, pero cada aplicación también tiene la barra de menú incluida.

Puedo relacionar esto con la interfaz de usuario eclipse, donde una aplicación puede contribuir al menú de la aplicación, pero cada menú vive en el contexto de la aplicación eclipse que agrega todos los complementos de la UI por separado.

Entonces, ¿cómo google esto en su interfaz de usuario? Parece que hay algo de javascript wizardry en marcha, con la barra de menú siendo inyectada en cada aplicación.

+0

No del todo claro en lo que usted está pidiendo aquí, ¿podría aclarar o reducirla? Sus preguntas parecen enfocarse en la interfaz de usuario, pero, ¿es esto realmente lo que quiere? Simplemente ejecutar Firebug y rastrear qué archivos se descargan y ejecutan revela mucho acerca de dónde se cargan los recursos de la interfaz de usuario. También hay varios artículos publicados (tanto por Google como por otros) sobre su solución de inicio de sesión único. –

+0

Estoy de acuerdo con David, las preguntas son buenas candidatas para escribir un libro en lugar de dar una respuesta sucinta y conciso. –

+0

He editado la pregunta, ¿espero que sea un poco más precisa ahora? –

Respuesta

1

No puedo hablar sobre Google, pero he trabajado en sitios web que hacen cosas similares. En un ejemplo, era un sitio web para una gran agencia inmobiliaria que tiene oficinas en todo el mundo, la página de inicio (y otras páginas) incluyen un carrusel que muestra contenido específico del país, todas las oficinas utilizaron instancias diferentes del mismo CMS para administrar sus propios contenidos

Lo que sucede es que el CMS (basado en .NET) usó archivos de controles de usuario y personalizados (.ascx) para representar la página final de aspx. Estos archivos ascx (para encabezado, pie de página y carrusel), todos los estilos y javascript relacionados con esos archivos (colocados en una carpeta que no se puede manipular llamada _CSS y _JS según nuestra convención) se mantienen de forma centralizada y luego se replican en todos los sitios locales .

La instancia de CMS, específica de una oficina en el país, creará sus propias páginas, pero todas usan estos encabezados y pies de página comunes proporcionados por la aplicación central.

La última parte de la imagen es para mantener todo esto sincronizado, necesita algún tipo de agente o servicio para propagar estos componentes comunes a todos los servidores y las instancias de CMS para asegurarse de que todos usan el mismo controles, estilos y javascript (los estilos y javascript podrían referenciarse de manera centralizada, pero el control de usuario personalizado debe vivir dentro del dominio de la aplicación del CMS específico al menos para .NET). Usamos Repliweb para tales tareas, pero no estoy muy familiarizado con sus detalles.

Desde el punto de vista arquitectónico, lo veo como una especie de arquitectura de complemento para la interfaz de usuario, por lo que tiene razón al relacionarlo con la arquitectura de Eclipse. El CMS central es un tipo abstracto que proporciona una interfaz que las instancias específicas del sitio deben cumplir e implementar.

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

Esto es genial. ¿Tiene una idea de cómo se llama el patrón, o podría llamarse? Tal vez "Patrón de contribución de UI"? Una vez que este patrón tenga un nombre, será más fácil mostrar enfoques de otras áreas, por ejemplo: [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 patrón de complemento. Desde MSDN: el patrón de plug-in es un patrón que amplía el comportamiento de una clase al permitir que las extensiones se conecten a una clase abstracta que, a su vez, se conecta a una clase principal. Esto crea una nueva subclase que incluye solo las capacidades requeridas en el contexto específico. – kabaros

+0

Debería ser posible lograr el mismo resultado final con los idiomas que no están basados ​​en la clase, por lo que no querría eliminar esos enfoques de la discusión. ¿Qué tal el "patrón de UI Plug-in"? –

3

Google utiliza la propia Closure Library para la parte de interfaz de usuario:

Qué es la biblioteca de cierre?

La biblioteca de cierres es una amplia, bien probada, modular y biblioteca JavaScript multiplataforma. Puede extraer exactamente lo que necesita de un gran conjunto de widgets y controles UI reutilizables, y de utilidades de nivel inferior para manipulación de DOM, comunicación de servidor, animación, estructuras de datos , pruebas unitarias, edición de texto enriquecido, y más.

[...]

¿Quién utiliza Biblioteca de cierre?

búsqueda, Gmail, mapas, documentos, sitios, Libros, Reader, Blogger, Calendar, Google +, Fotos

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

3

El proyecto hawt.io tiene un enfoque interesante:

hawtio es altamente modular, por lo que puede descubrir exactamente qué servicios están dentro de una JVM y actualizar dinámicamente la consola para proporcionarles una interfaz.

El enlace es here

Cuestiones relacionadas