Qualcuno progettare API o codice della libreria in questo modo?

voti
2

Ero leggere alcune cose su come progettare una biblioteca o API bene, e ci siamo imbattuti grande discorso di Joshua Bloch a Google Tech Talks. Ora, anche se io sono in nessun posto vicino uno sviluppatore API professionale, penso che la programmazione di un gruppo di classi / funzioni è simile, anche se molto ridotta versione della stessa cosa - chiara separazione delle azioni, la facilità e l'uso piacevole, incoraggiando codice pulito , eccetera.

Stavo attraversando alcuni open source il codice Java utilizzato e avuto questa idea (niente di nuovo, ma solo mettendo in su lucidamente ...)

Prendiamo un esempio di codice pseudo (o forse un po 'di dialetto del BASIC):

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

Ora ispirato al codice Java vorrei essere in grado di fare qualcosa di simile a questo:

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

La mia domanda è questa:
qualcuno le API di progettazione altro a partire dalla pseudo-codice come questo?

E 'una buona idea per qualcosa di piccolo? Dire fino a 10 classi ciascuna con forse 10 metodi, ciascun metodo non più di 5-6 righe di codice all'interno di esso. Questo è ovviamente solo un insieme di massima di numeri per per mostrare la dimensione delle classi da progettare - in nessun posto vicino a un API completa e non solo un progetto hobby - un pacchetto professionale che fa qualcosa di piccolo, ma lo fa bene .

Qualcuno ha trovato seri svantaggi di questo approccio?

Credo che l' unico vero vantaggio è che ti costringe a scrivere le vostre casi d'uso prima .

L'altra cosa è che i nomi e verbi rimanere semplice , consentendo al prodotto finale per schivare il MultiPhraseAbstractParadigmDesignPatternImplementor sindrome di :-D

È pubblicato 22/01/2010 alle 20:40
fonte dall'utente
In altre lingue...                            


4 risposte

voti
0

Sì, questo è il modo in cui jQuery è progettato, si finisce sempre per sé il ritorno in modo da poter metodi della catena come questo.

Risposto il 22/01/2010 a 20:42
fonte dall'utente

voti
0

Tendo iniziare con classi e metodi vuoti. La sua davvero una questione di top-down vs basso verso l'alto design.

Ho veramente preferisco un enorme disegno lavagna però.

Risposto il 22/01/2010 a 20:45
fonte dall'utente

voti
3

Si tratta di un modello di progettazione piuttosto comune chiamato interfaccia fluida . E 'comune in linguaggi funzionali e sta guadagnando popolarità altrove. Ho visto la prima volta in Scheme.

E 'un linguaggio molto conveniente e leggibile, ma ricordate che ci sarà spesso momenti in cui effettivamente si desidera inizializzare più di una variabile in una sola chiamata di funzione. Ad esempio, quando c'è stato interno che deve essere impostato a seconda di una combinazione di dati, o quando l'impostazione e sovrascrivendo i valori predefiniti è costoso. Così, come con tutti i "pattern", usare con giudizio e con premeditazione.

Risposto il 22/01/2010 a 20:52
fonte dall'utente

voti
1

Jquery fa esattamente questo. Da 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 per la versione 1.4 pre-:

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

Ho anche fatto cose simili in C # che generano WPF in codice:

new StackPanel {
   Children = {
      new TextBlock { Text = "Hi there", Width = 50 },
      new TextBox { Width = 100 },
      new Border { 
          Content = new ListBox()
      }
   }
};
Risposto il 22/01/2010 a 21:46
fonte dall'utente

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