2010-01-18 21 views
13

Recientemente me encontré con esta expresión - pero la lectura de hasta on Wikipedia no aclaró mucho para mí - Todavía no lo entiendo:¿Qué es una interfaz fluida?

  1. cuál es el punto de que
  2. cómo se utiliza en la práctica (es decir, ¿cómo beneficia a un codificador en sus sistemas diarios de trabajo/construcción?

[Editar] ejemplo El artículo de Wikipedia C++ es excesivamente largo, y confunde la discusión de una interfaz de fluido con un ejemplo de una aplicación simple GLUT. ¿Puede alguien proporcionar un ejemplo de SUCCINCT C++ de una clase que ilustre una interfaz fluida (por ejemplo, cómo difiere dicha influencia de una interfaz ordinaria de C++)?

Respuesta

8

Beneficia al codificador al reducir la cantidad que tiene que escribir (y leer).

Para usar el ejemplo de C++ en la Wikipedia:

Antes:

int main(int argc, char **argv) { 
    GlutApp app(argc, argv); 
    app.setDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_ALPHA|GLUT_DEPTH); // Set framebuffer params 
    app.setWindowSize(500, 500); // Set window params 
    app.setWindowPosition(200, 200); 
    app.setTitle("My OpenGL/GLUT App"); 
    app.create(); 
} 

Después:

int main(int argc, char **argv) { 
    FluentGlutApp app(argc, argv) 
     .withDoubleBuffer().withRGBA().withAlpha().withDepth() 
     .at(200, 200).across(500, 500) 
     .named("My OpenGL/GLUT App"); 
    app.create(); 
} 
+0

¿Podría darnos un ejemplo sucinto de esto ?. El artículo de wikipedia C++ ejemplo es demasiado largo, y el punto de la discusión fluida de la interfaz se pierde en el waffle de una aplicación Glut. –

+1

¿Cómo se diferencia esto del encadenamiento de métodos? (¿Es este otro caso de alguien acuñando una nueva frase para describir algo que ya se conoce con otro nombre?) –

+3

@Lámelo al HOMBRE: El artículo de la wikipedia vincula el artículo original de Martin Fowler (donde acuñó la frase). Al final de ese artículo, él da alguna indicación de por qué las interfaces fluidas son más que solo un método de encadenamiento. http://martinfowler.com/bliki/FluentInterface.html –

2

Una gran diferencia y ventaja de la interfaz fluida es que no es necesario una variable de instancia para cambiar algunas propiedades cuando desea crear un objeto y usarlo como argumento:

sin:

Object object; 
object.setcolor("red"); 
object.setstyle("solid"); 
object.setname("test"); 
world.CreateNode(object); 

con interfaz fluida:

world.CreateNode(Object() 
              .setcolor("red") 
              .setstyle("solid") 
              .setname("test") 
          ); 
7

Hay diferentes interpretaciones del término "interfaz fluida". Una forma común de crear una en C++ es el encadenamiento de método, que se utiliza comúnmente en por ejemplo la biblioteca iostream:

Object.MethodA().MethodB(); 
cout << "a = " << a; 

El Named Parameter Idiom es otro buen ejemplo de una interfaz de fluidez:

Window w = CreateWindow() 
       .Width(400) 
       .Height(300) 
       .OnTop(); 

Los beneficios ? Código que es mejor legible y más flexible, aunque eso todavía depende de la implementación, por supuesto.

Cuestiones relacionadas