2010-01-18 2 views
13

Недавно я наткнулся на это выражение - но чтение до on Wikipedia не уточнил, это много для меня - я до сих пор не понимаю:Что такое свободный интерфейс?

  1. Какой смысл этого
  2. Как он используется на практике (т.е. как это выгодно кодеру в повседневной работе/строительной системе)?

[Редактировать] Википедии Статьи C++ примера слишком долго, и это отождествление обсуждения текучим интерфейса с примером простого GLUT приложения. Может ли кто-нибудь предоставить пример CUCCINCT C++ для класса, который иллюстрирует свободный интерфейс (как такое влияние отличается от обычного интерфейса C++, например)?

ответ

8

Это выгодно кодеру, уменьшая количество, которое он должен набирать (и читать).

Чтобы использовать пример C++ в Википедии:

До:

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

После:

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

Не могли бы вы предоставить краткий пример этого ?. Пример статьи на C++ в Википедии слишком длинный, и точка свободного обсуждения интерфейса теряется в вафеле приложения Glut. –

+1

Как это отличается от метода цепочки? (это еще один случай, когда кто-то вводит новую фразу, чтобы описать что-то, что уже известно другим именем?) –

+3

@ Поверните его ЧЕЛОВЕКУ: Статья в Википедии ссылается на оригинальную статью Мартина Фаулера (где он придумал эту фразу). В самом конце этой статьи он дает некоторые указания на то, почему плавные интерфейсы - это не просто цепочки методов. http://martinfowler.com/bliki/FluentInterface.html –

2

одна большая разница и преимущества текучего интерфейса является то, что вам не нужно переменную экземпляра, чтобы изменить некоторые свойства, когда вы хотите создать объект, и использовать его в качестве аргумента:

без:

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

с беглым интерфейсом:

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

Существуют различные толкования термина "свободно интерфейс". Обычный способ создать в C++ является метод цепочки, который обычно используется, например, в библиотеку iostream:

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

Named Parameter Idiom еще один хороший пример свободно интерфейса:

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

Преимущества ? Код, который является более читаемым и более гибким, хотя это все еще зависит от реализации курса.

Смежные вопросы