2010-01-18 9 views
13

Recentemente ho sono imbattuto in questa espressione - ma la lettura fino on Wikipedia non ha chiarito molto per me - io ancora non capisco:Cos'è un'interfaccia fluente?

  1. Qual è il punto di esso
  2. come viene utilizzato in pratica (cioè, come può essere utile a un programmatore nei loro sistemi di lavoro/costruzione giorno per giorno?

[Edit] L'articolo Wikipedia C++ esempio è troppo lungo, e fonde la discussione di un'interfaccia fluida con un esempio di una semplice applicazione Glut. Qualcuno può fornire un esempio SUCCINCT C++ di una classe che illustri un'interfaccia fluente (come può una tale influenza differire da una normale interfaccia C++ per esempio)?

risposta

8

Vantaggi del codificatore riducendo la quantità che deve digitare (e leggere).

per usare l'esempio C++ su Wikipedia:

Prima:

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(); 
} 

Dopo:

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

Potrebbe fornire un esempio succinto di questo ?. L'articolo C++ di wikipedia è troppo lungo, e il punto della discussione fluente dell'interfaccia è perso nelle chiacchiere di un'applicazione Glut. –

+1

In che cosa differisce dal concatenamento del metodo? (questo è un altro caso in cui qualcuno conia una nuova frase per descrivere qualcosa che è già noto con un altro nome?) –

+3

@Stick su THE MAN: L'articolo di Wikipedia si collega all'articolo originale di Martin Fowler (dove ha coniato la frase). Alla fine di questo articolo, fornisce alcune indicazioni sul perché le interfacce fluenti siano più di un semplice concatenamento di metodi. http://martinfowler.com/bliki/FluentInterface.html –

2

Una grande differenza e il vantaggio della interfaccia fluida è che non è necessario una variabile di istanza per modificare alcune proprietà quando si desidera creare un oggetto e utilizzarlo come argomento:

senza:

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

con un'interfaccia fluida:

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

Esistono diverse interpretazioni del termine "interfaccia fluida". Un modo comune di creare una in C++ è metodo concatenamento, che è comunemente usato per esempio nella libreria iostream:

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

Il Named Parameter Idiom è un altro bell'esempio di un'interfaccia fluida:

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

I vantaggi ? Codice che è meglio leggibile e più flessibile, anche se ciò dipende ancora dall'implementazione del corso.