Buscar..


Observaciones

Metas

El objetivo principal de una interfaz fluida es una mayor legibilidad.

Cuando se usa para construir objetos, las opciones disponibles para el llamante se pueden hacer claramente y cumplir mediante controles en tiempo de compilación. Por ejemplo, considere el siguiente árbol de opciones que representan pasos a lo largo de la ruta para construir un objeto complejo:

A -> B 
  -> C -> D -> Done
       -> E -> Done
       -> F -> Done.
       -> G -> H -> I -> Done.

Un constructor que utiliza una interfaz fluida permitiría a la persona que llama ver fácilmente qué opciones están disponibles en cada paso. Por ejemplo, A -> B es posible, pero A -> C no es y daría como resultado un error en tiempo de compilación.

Verdad - Marco de prueba de fluidez

De "Cómo utilizar la verdad" http://google.github.io/truth/

String string = "awesome";
assertThat(string).startsWith("awe");
assertWithMessage("Without me, it's just aweso").that(string).contains("me");

Iterable<Color> googleColors = googleLogo.getColors();
assertThat(googleColors)
    .containsExactly(BLUE, RED, YELLOW, BLUE, GREEN, RED)
    .inOrder();

Estilo de programación fluido

En el estilo de programación fluido, devuelve this desde métodos fluidos (configuradores) que no devolverían nada en un estilo de programación no fluido.

Esto le permite encadenar las diferentes llamadas de métodos, lo que hace que su código sea más corto y más fácil de manejar para los desarrolladores.

Considere este código no fluido:

public class Person {
  private  String firstName;
  private String lastName;

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public String whoAreYou() {
    return "I am " + firstName + " " + lastName;
  }

  public static void main(String[] args) {
    Person person = new Person();
    person.setFirstName("John");
    person.setLastName("Doe");
    System.out.println(person.whoAreYou());
  }
}

Como los métodos de establecimiento no devuelven nada, necesitamos 4 instrucciones en el método main para crear una instancia de una Person con algunos datos e imprimirla. Con un estilo fluido, este código se puede cambiar a:

public class Person {
  private  String firstName;
  private String lastName;

  public String getFirstName() {
    return firstName;
  }

  public Person withFirstName(String firstName) {
    this.firstName = firstName;
    return this;
  }

  public String getLastName() {
    return lastName;
  }

  public Person withLastName(String lastName) {
    this.lastName = lastName;
    return this;
  }

  public String whoAreYou() {
    return "I am " + firstName + " " + lastName;
  }

  public static void main(String[] args) {
    System.out.println(new Person().withFirstName("John")
      .withLastName("Doe").whoAreYou());
  }
}

La idea es devolver siempre algún objeto para permitir la construcción de una cadena de llamadas a métodos y usar nombres de métodos que reflejen el habla natural. Este estilo fluido hace que el código sea más legible.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow