Are cineva de design api sau un cod de bibliotecă în acest fel?

voturi
2

Am citit câteva lucruri despre cum să se proiecteze o bibliotecă sau API bine, și a dat peste o mare discutie Joshua Bloch la Tech Talks Google. Acum, deși sunt nici pe departe un API dezvoltator profesionist, cred că programarea unui grup de clase / funcții este un similară, deși mult la scară redusă versiune același lucru - separare clară a acțiunilor, ușurința și utilizarea plăcută, încurajând codul curat etc.

Am fost trece printr-o anumită folosit pe scară largă open source cod Java și a luat această idee (nimic nou, ci doar punerea la lucidly ...)

Să luăm un exemplu de cod pseudo (sau , poate , dialect al limbii de bază):

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

Acum , inspirat de codul Java aș dori să fie capabil să facă ceva de genul:

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

Întrebarea mea este:
Are cineva API - uri de design else pornind de la pseudo-cod ca asta?

Este o idee bună pentru ceva mic? Spune pana la 10 clase fiecare cu poate 10 metode, fiecare metodă nu mai mult decât 5-6 linii de cod în interiorul acestuia. Aceasta este , evident , doar un set dur de numere pentru a arăta dimensiunea claselor care urmează să fie proiectate - nicăieri aproape de un API completă și nu doar un proiect de hobby - un pachet profesional care face ceva mic , dar o face bine .

Are cineva a găsit dezavantaje serioase la această abordare?

Cred că un avantaj real , este că te forțează să scrie în jos dvs. de utilizare-cazuri mai întâi .

Un alt lucru este că substantivele și verbele ședere simplă , permițând produsul final se eschiva de MultiPhraseAbstractParadigmDesignPatternImplementor sindromul :-D

Întrebat 22/01/2010 la 20:40
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
0

Da, acest lucru este modul în care jQuery este proiectat, se termină întotdeauna se întoarce în sine, astfel încât să puteți metode de lanț, cum ar fi acest lucru.

Publicat 22/01/2010 la 20:42
sursa de către utilizator

voturi
0

Am tendința de a începe cu clasele goale și metode. Într-adevăr sa o chestiune de sus în jos față de design de jos în sus.

Prefer într-adevăr o schiță imensă tablă, deși.

Publicat 22/01/2010 la 20:45
sursa de către utilizator

voturi
3

Acesta este un model destul de comun de design numit o interfață fluent . Este comun în limbile funcționale și câștigă popularitate în altă parte. L - am văzut pentru prima dată în Schema.

Este un idiom foarte comod și ușor de citit, dar amintiți-vă că nu va fi de multe ori în cazul în care de fapt nu doriți să inițializa mai mult de o variabilă într-un singur apel de funcție. De exemplu, atunci când există starea internă, care trebuie să fie stabilită în funcție de o combinație de date, sau la stabilirea și suprascrierea valori implicite este costisitoare. Deci, cu toate ca „modele“, folosiți judicios și cu chibzuire.

Publicat 22/01/2010 la 20:52
sursa de către utilizator

voturi
1

Jquery face exact acest lucru. De la 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!');  
    }  
}); 

sau pentru pre-1.4:

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

Am făcut, de asemenea, lucruri similare în C # WPF care generează în cod:

new StackPanel {
   Children = {
      new TextBlock { Text = "Hi there", Width = 50 },
      new TextBox { Width = 100 },
      new Border { 
          Content = new ListBox()
      }
   }
};
Publicat 22/01/2010 la 21:46
sursa de către utilizator

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