¿Alguien diseñar API o código de la biblioteca de esta manera?

votos
2

Estaba leyendo algunas cosas acerca de cómo diseñar una biblioteca o API bien, y topé con gran charla de Joshua Bloch en Google Tech conversaciones. Ahora bien, aunque estoy muy lejos de un desarrollador API profesional, creo que la programación de un montón de clases / funciones es una similar, aunque mucho más reducida versión de lo mismo - la separación clara de las acciones, la facilidad y el uso placentero, fomentando un código limpio , etc.

Yo estaba pasando por algo de código Java de código abierto ampliamente utilizado y tengo esta idea (nada nuevo, pero sólo ponerlo a la lucidez ...)

Tomemos un ejemplo pseudo código (o tal vez un dialecto de BASIC):

1. new label
2. set name 'hello world'
3. set color 'blue'
4. show 'topmost'
5. on click hide

Ahora inspirado en el código Java Me gustaría ser capaz de hacer algo como esto:

1. Label l = new Label()
2.          .setName('Hello World')
3.          .setColor('blue')
4.          .show(zindex.top);
5. l.onClick = l.hide() ;

Mi pregunta es la siguiente:
¿alguien API demás diseño a partir del pseudo-código como este?

¿Es una buena idea para algo pequeño? Decir hasta 10 clases cada uno con unos 10 métodos, cada método de no más de 5-6 líneas de código en su interior. Esto es, obviamente, sólo un conjunto de números en bruto a para mostrar el tamaño de las clases que diseñarse - ni cerca de una API completa y no sólo un proyecto de pasatiempo - un paquete profesional que hace algo pequeño, pero lo hace bien .

Ha encontrado a nadie ningún serios inconvenientes de este enfoque?

Creo que el único beneficio real es que te obliga a escribir sus primeros casos de uso .

La otra cosa es que los nombres y verbos siendo simples , permitiendo a su producto final para esquivar la MultiPhraseAbstractParadigmDesignPatternImplementor síndrome :-D

Publicado el 22/01/2010 a las 20:40
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
0

Sí, esta es la forma en que está diseñado jQuery, siempre termina volviendo en sí, para que pueda métodos de cadena como esta.

Respondida el 22/01/2010 a las 20:42
fuente por usuario

votos
0

Tiendo a comenzar con las clases y los métodos vacíos. Es realmente una cuestión de arriba hacia abajo de abajo hacia arriba contra el diseño.

Realmente prefiero una enorme boceto pizarra sin embargo.

Respondida el 22/01/2010 a las 20:45
fuente por usuario

votos
3

Este es un patrón de diseño bastante común que se llama una interfaz fluida . Es común en los lenguajes funcionales y está ganando popularidad en otros lugares. Vi por primera vez en el esquema.

Es un lenguaje muy conveniente y fácil de leer, pero recuerda que a menudo habrá momentos en los que realmente no desea inicializar más de una variable en una sola llamada de función. Por ejemplo, cuando hay estado interno que tiene que establecerse en función de una combinación de datos, o cuando el ajuste y sobrescribir los valores por defecto es costoso. Por lo tanto, como con todos los "patrones", utilizar juiciosamente y con previsión.

Respondida el 22/01/2010 a las 20:52
fuente por usuario

votos
1

JQuery hace exactamente esto. De http://net.tutsplus.com/tutorials/javascript-ajax/jquery-1-4-released-the-15-new-features-you-must-know/ :

jQuery('<div/>', {  
    id: 'foo',  
    css: {  
        fontWeight: 700,  
        color: 'green'  
    },  
    click: function(){  
        alert('Foo has been clicked!');  
    }  
}); 

o para pre-1.4:

jQuery('<div/>')  
   .attr('id', 'foo')  
   .css({  
       fontWeight: 700,  
       color: 'green'  
   })  
   .click(function(){  
       alert('Foo has been clicked!');  
   });  

También he hecho cosas similares en C # generando WPF en el código:

new StackPanel {
   Children = {
      new TextBlock { Text = "Hi there", Width = 50 },
      new TextBox { Width = 100 },
      new Border { 
          Content = new ListBox()
      }
   }
};
Respondida el 22/01/2010 a las 21:46
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more