Heeft iemand api of bibliotheek code op deze manier te ontwerpen?

stemmen
2

Ik was het lezen van een aantal dingen over hoe je een bibliotheek of API ontwerpen goed, en struikelde over grote talk Joshua Bloch bij Google Tech Talks. Nu hoewel ik nergens ben in de buurt van een professionele API-ontwikkelaar, ik denk dat het programmeren van een bos van klassen / functies is een vergelijkbaar, hoewel veel verkleinde versie van hetzelfde - duidelijke scheiding van de acties, gemak en plezierig gebruik, het stimuleren van schone code , enz.

Ik ging door een aantal veel gebruikte open source Java-code en kreeg dit idee (niets nieuws, maar zetten het op een heldere manier ...)

Laten we een voorbeeld nemen pseudo-code (of misschien sommige dialect van BASIC):

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

Nu is geïnspireerd door de Java-code die ik zou willen kunnen doen iets als dit:

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

Mijn vraag is:
Heeft iemand anders ontwerp API uitgaande van pseudo-code als deze?

Is het een goed idee voor iets kleins? Zeggen upto elk met misschien 10 werkwijzen 10 klassen, elke methode maximaal dan 5-6 regels code erin. Dat is natuurlijk maar een ruwe set van nummers aan om de grootte van de klassen te tonen worden ontworpen - nergens dicht bij een volledige API en niet alleen een hobby project - een professioneel pakket dat kleine iets doet, maar doet het goed .

Heeft iemand vond geen ernstige nadelen aan deze aanpak?

Ik denk dat de enige echte voordeel is dat het je dwingt eerst op te schrijven uw use-cases .

De andere is dat de zelfstandige naamwoorden en werkwoorden blijven eenvoudig , waardoor uw uiteindelijke product te ontwijken de MultiPhraseAbstractParadigmDesignPatternImplementor syndroom :-D

De vraag is gesteld op 22/01/2010 om 20:40
bron van user
In andere talen...                            


4 antwoorden

stemmen
0

Ja, dit is de manier waarop jQuery is ontworpen, het eindigt altijd terug te keren zelf, zodat u kunt chain methoden zoals dit.

antwoordde op 22/01/2010 om 20:42
bron van user

stemmen
0

Ik heb de neiging om te beginnen met lege klassen en methoden. Het is echt een kwestie van top-down versus bottom-up design.

Ik heb echt liever een grote whiteboard schets wel.

antwoordde op 22/01/2010 om 20:45
bron van user

stemmen
3

Dit is een vrij veel voorkomende ontwerp patroon heet een vloeiend-interface . Het is gebruikelijk in functionele talen en wordt elders aan populariteit wint. Ik zag het voor het eerst in schema.

Het is een zeer handig en leesbaar idioom, maar vergeet niet dat er vaak momenten waar je eigenlijk wilt meer dan een variabele initialiseren in een enkele functie aanroep zal zijn. Bijvoorbeeld, als er interne toestand die moet worden ingesteld afhankelijk van een combinatie van gegevens of bij het instellen en overschrijven standaardwaarden kostbaar. Dus, zoals met alle "patronen", gebruiken oordeelkundig en met voorbedachtheid.

antwoordde op 22/01/2010 om 20:52
bron van user

stemmen
1

JQuery doet precies dit. Van 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!');  
    }  
}); 

of voor pre-1.4:

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

Ik heb ook gedaan soortgelijke dingen in C # het genereren van WPF in code:

new StackPanel {
   Children = {
      new TextBlock { Text = "Hi there", Width = 50 },
      new TextBox { Width = 100 },
      new Border { 
          Content = new ListBox()
      }
   }
};
antwoordde op 22/01/2010 om 21:46
bron van user

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