2010-08-30 2 views
8

Nella presentazione di Bloch, ha detto che il progettista dovrebbe cercare il rapporto buono per il peso per l'API. Inoltre, ha anche sottolineato che 'peso concettuale più importante di massa'. Immagino che il peso sia per 'Peso concettuale', alla rinfusa è per il numero di metodi di una classe.Che cos'è il "rapporto peso/potenza" di un'API?

Ma non riuscivo a capire che cosa ‘peso concettuale’ è, che cosa ‘rapporto potenza-peso’ è. Benvenuto a qualsiasi spiegazione!

Bloch ha fornito un esempio: List.subList() ha un buon "rapporto peso/potenza". Se i clienti vogliono conoscere un indice di un elenco secondario, non ha bisogno di chiamare un metodo basso 'p2w ratio' indexOfSubList(a,b,e), invece, potrebbe chiamare List.subList(a,b).indexOf(e). Bloch pensava che questo fosse il "rapporto peso/potenza".

Origine:

API dovrebbe essere il più piccolo possibile, ma non più piccola

  • API dovrebbe soddisfare le sue esigenze
  • In caso di dubbio lasciarlo fuori
    • Funzionalità, classi , metodi, parametri, ecc.
    • Puoi sempre aggiungere, ma non si può mai togliere
  • peso concettuale più importante della massa
  • cercare un buon rapporto potenza-peso

risposta

5

Interpreterei il "peso concettuale" come il numero di concetti astratti che devi imparare e capire per utilizzare l'API. I concetti di solito si associano a classi pubbliche, mentre le classi che non sono pubbliche si aggiungono alla maggior parte, ma non al peso concettuale.

Quindi, se lo si inserisce tecnicamente, un'API ha un peso concettuale elevato se un client tipico dell'API deve utilizzare esplicitamente un sacco di classi appartenenti all'API per lavorare con esso.

"buon rapporto potenza-peso" significa quindi che l'API deve utilizzare il minor numero possibile di classi pubbliche per offrire il maggior numero di funzionalità possibile. Ciò significa che un API dovrebbe:

  • Non aggiungere concetti o astrazioni proprie che non sono presenti nel dominio
  • Per i domini complessi, offrire scorciatoie per le funzionalità più comunemente necessarie che consente a un utente tipico per bypassare il parti più complesse del dominio
5

direi che

  • potere = la quantità di funzionalità fornita dall'API
  • peso = lo sforzo richiesto per apprendere l'API
+1

Inoltre, il peso potrebbe significare lo sforzo richiesto per * caricare * l'API. Non avrei bisogno di caricare un mostro da 1000 KB per un effetto di rollover dell'immagine. – Piskvor

+1

@Piskvor: Sarebbe la "massa", direi. –

+0

@Michael Borgwardt: Ah davvero. Silly me. – Piskvor

1

Immagino che un'API con un buon rapporto peso/potenza sia un'API che offre molte funzionalità (alimentazione), mentre richiede poco sforzo per funzionare correttamente (peso) con essa.

Questo può essere fatto tramite, ad esempio, "Convention over Configuration". (Nota: questo è solo un esempio, e si può raggiungere questo obiettivo in molti modi.)

sarebbe utile un collegamento alla presentazione di Bloch, potrebbe riferirsi a qualcos'altro :-)

+0

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

1

Si sta riferendo a tutti il materiale che ottieni usando un'API. Il suo esempio è per le API delle collezioni in cui ogni volta che accedete, ottenete solo funzionalità specifiche. D'altra parte, alcune API caricheranno molte più cose solo per darti qualche funzionalità.

0

Un altro aspetto essenziale del rapporto peso/potenza di un'API o persino di una lingua nel suo insieme è la sua verbosità. Ovvero, quanto devi digitare per eseguire un'attività e la leggibilità del codice risultante. In Java, Iterator ha un rapporto peso/potenza migliore di Enumeration, l'interfaccia che è stata progettata per sostituire, semplicemente perché Iterator ha un nome più breve e nomi di metodo più brevi, che non sono più lunghi di quanto devono essere e fanno lo stesso lavoro senza perdita di chiarezza (come pure il metodo aggiuntivo remove).

Problemi correlati