2010-01-18 12 views
13

ich auf diesen Ausdruck kam vor kurzem - aber on Wikipedia Lesung bis hat es nicht für mich klären viel - ich habe es immer noch nicht bekommen:Was ist eine fließende Schnittstelle?

  1. Was ist der Sinn davon
  2. Wie ist es in der Praxis eingesetzt (dh wie kommt es einem Programmierer in seiner täglichen Arbeit/Bausystemen zu Gute?

[Bearbeiten] Wikipedia-Artikel C++ Beispiel ist zu lang, und verschmilzt die Diskussion über eine fließend Schnittstelle mit einem Beispiel einer einfachen Glut App. Kann jemand ein SUCCINCT C++ - Beispiel für eine Klasse bereitstellen, die eine fließende Schnittstelle darstellt (wie unterscheidet sich ein solcher Einfluss beispielsweise von einer normalen C++ - Schnittstelle)?

Antwort

8

Es profitiert den Coder durch die Reduzierung der Menge, die er eingeben (und lesen) muss.

an den C++ Beispiel auf Wikipedia zu verwenden:

Vorher:

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

Nach:

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

Könnten Sie ein prägnantes Beispiel dafür liefern ?. Der Wikipedia-Artikel C++ - Beispiel ist zu lang, und der Punkt der fließenden Interface-Diskussion geht in der Waffle einer Glut-Anwendung verloren. –

+1

Wie unterscheidet sich dies von Methodenverkettung? (Ist das ein anderer Fall von jemandem, der eine neue Phrase prägt, um etwas zu beschreiben, das bereits unter einem anderen Namen bekannt ist?) –

+3

@Stick it to THE MAN: Der Wikipedia-Artikel verlinkt auf Martin Fowlers Originalartikel (wo er den Satz prägte). Am Ende dieses Artikels gibt er einen Hinweis darauf, warum fließende Interfaces mehr sind als nur Methodenverkettung. http://martinfowler.com/bliki/FluentInterface.html –

2

Ein großer Unterschied und Vorteil der Fluent Interface ist, dass Sie nicht brauchen eine Instanzvariable zum Ändern einiger Eigenschaften, wenn Sie ein Objekt erstellen und als Argument verwenden möchten:

ohne:

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

mit fließend Schnittstelle:

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

Es gibt verschiedene Interpretationen des Begriffs "Fluent Interface" sind. Ein üblicher Weg, eine in C++ zu erstellen, ist Methode Verkettung, die üblicherweise zum Beispiel in der iostream-Bibliothek verwendet wird:

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

Die Named Parameter Idiom ist ein weiteres schönes Beispiel für eine fließend Schnittstelle:

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

Die Vorteile ? Code, der besser lesbar und flexibler ist, obwohl das natürlich immer noch von der Implementierung abhängt.

Verwandte Themen