2010-08-30 4 views
8

En la presentación de Bloch, dijo que el diseñador debería buscar buena relación potencia-peso para API. Además, también hizo hincapié en que 'Peso conceptual más importante que a granel'. Supongo que el peso es para 'Peso conceptual', a granel es para el número de métodos de una clase.¿Qué es la "relación potencia-peso" de una API?

Pero yo no podía entender lo que peso conceptual 'es, lo que relación potencia-peso' es. Bienvenido a cualquier explicación!

Bloch dio un ejemplo: List.subList() tiene una buena relación potencia-peso. Si los clientes quieren saber un índice de una lista secundaria, no necesita llamar a un método bajo de "proporción p2" indexOfSubList(a,b,e), sino que puede llamar al List.subList(a,b).indexOf(e). Bloch pensó que esto es 'relación potencia-peso'.

Origen:

API debe ser tan pequeño como sea posible pero no más pequeño

  • API debe satisfacer sus necesidades
  • En caso de duda se lo saltan
    • Funcionalidad, clases , métodos, parámetros, etc.
    • Siempre puede agrega, pero nunca se puede eliminar
  • peso conceptual más importante que la mayor
  • buscar una buena relación potencia-peso

Respuesta

5

Interpretaría el "peso conceptual" como la cantidad de conceptos abstractos que debe aprender y comprender para usar la API. Los conceptos generalmente se asignan a clases públicas, mientras que las clases que no son públicas se agregan al grueso pero no al peso conceptual.

Así que si lo pones técnicamente, una API tiene un alto peso conceptual si un cliente típico de la API tiene que usar explícitamente muchas clases pertenecientes a la API para trabajar con ella.

"buena relación potencia-peso" significa que la API debe utilizar el menor número posible de clases públicas para ofrecer la mayor funcionalidad posible. Eso significa una API debe:

  • no añadir conceptos o abstracciones de su propia que no están presentes en el dominio
  • Para los dominios complejos, ofrecer accesos directos a las funciones más utilizadas necesaria que permite a un usuario típico de eludir la partes más complejas del dominio
5

diría que

  • poder = la cantidad de funcionalidad provista por la API
  • peso = el esfuerzo requerido para aprender la API
+1

también, el peso podría significar el esfuerzo requerido para * cargar * la API. No debería necesitar cargar un marco de monstruo de 1000 KB para un efecto de imagen volcada. – Piskvor

+1

@Piskvor: Eso sería el "volumen", diría yo. –

+0

@Michael Borgwardt: Ah, de hecho. Tonto de mí. – Piskvor

1

Supongo que una API con una buena relación potencia-peso es una API que ofrece mucha funcionalidad (potencia) mientras que requiere poco esfuerzo para trabajar adecuadamente (peso) con ella.

Esto se puede hacer a través de, por ejemplo, "Convention over Configuration". (Tenga en cuenta que esto es sólo un ejemplo, y se puede lograr de muchas maneras.)

sería útil un enlace a la presentación de Bloch, que podría estar refiriéndose a otra cosa :-)

+0

desde: http://lcsd05.cs.tamu.edu/slides/keynote.pdf –

1

Se refiere a todos lo que obtienes al usar una API. Su ejemplo es para la API de colecciones, donde cada vez que accede a ella, solo obtiene una funcionalidad específica. Por otro lado, algunas API cargarán muchas más cosas solo para darte alguna funcionalidad.

0

Otro aspecto esencial de la relación potencia-peso de una API o incluso de un idioma en general es su verbosidad. Es decir, cuánto debe escribir para realizar una tarea y la legibilidad del código resultante. En Java, Iterator tiene una mejor relación potencia/peso que Enumeration, la interfaz para la que fue diseñada, simplemente porque Iterator tiene un nombre más corto y nombres de métodos más cortos, que ya no son más de lo que deben ser y hacen el mismo trabajo sin pérdida de claridad (así como el método adicional remove).

Cuestiones relacionadas