Hat jemand api oder Bibliotheks-Code auf diese Weise entwerfen?

stimmen
2

Ich war ein paar Dinge über das Lese nach oben, wie einer Bibliothek oder API gut zu entwerfen, und stolperte über Joshua Blochs großes Gespräch bei Google Tech Talk. Nun, obwohl ich nirgendwo in der Nähe eines professionellen API-Entwickler bin, ich glaube, die Programmierung einer Reihe von Klassen / Funktionen ist eine ähnliche, wenn auch viel abgespeckte Version der gleichen Sache - klare Trennung von Aktionen, Leichtigkeit und angenehmen Gebrauch, sauberen Code ermutigend , etc.

Ich ging durch einige weithin Open-Source-Java-Code verwendet, und habe diese Idee (nichts Neues, aber setzen es nur bis lucidly ...)

Nehmen wir ein Beispiel nehmen Pseudo - Code (oder vielleicht einige Dialekt von BASIC):

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

Jetzt durch den Java - Code inspiriert , die ich in der Lage sein würde , zu tun , etwas wie folgt aus :

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

Meine Frage ist:
Hat beginnend jemand anderes Design APIs von Pseudo-Code wie folgt?

Ist es eine gute Idee für etwas klein? Sagen Sie bis zu 10 Klassen jeweils mit vielleicht 10 Methoden, jede Methode nicht mehr als als 5-6 Zeilen Code in seinem Innern. Das ist natürlich nur eine grobe Menge von Zahlen , um die Größe der Klassen zu zeigen entworfen werden - nirgendwo in der Nähe zu einer vollständigen API und nicht nur ein Hobby - Projekt - ein professionelles Paket , das etwas klein tut , aber tut es auch .

Hat jemand keine ernsthaften Nachteile dieses Ansatzes gefunden?

Ich denke , der ein echter Vorteil ist , dass es Sie zwingt Ihre Anwendungsfälle zunächst aufschreiben .

Die andere Sache ist , dass die Substantive und Verben einfach bleiben , so dass Ihr Endprodukt ausweichen das MultiPhraseAbstractParadigmDesignPatternImplementor Syndrom :-D

Veröffentlicht am 22/01/2010 um 20:40
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
0

Ja, das ist die Art und Weise ist, dass jQuery ausgelegt ist, es endet immer selbst zurückkehrt, so dass Sie Kette Methoden wie diese.

Beantwortet am 22/01/2010 um 20:42
quelle vom benutzer

stimmen
0

Ich neige dazu, mit leeren Klassen und Methoden zu starten. Es ist wirklich eine Frage der von oben nach unten vs Bottom-up-Design.

Ich ziehe es wirklich eine riesige Tafel Skizze though.

Beantwortet am 22/01/2010 um 20:45
quelle vom benutzer

stimmen
3

Dies ist ein recht häufiges Designmuster ein gerufener Fluent Interface . Es ist üblich , in funktionalen Sprachen und ist an Popularität gewinnt anderswo. Ich sah es zuerst in Schema.

Es ist ein sehr bequemes und gut lesbar Idiom, aber denken Sie daran, dass es oft sein wird, wo man tatsächlich will mehr als eine Variable in einem einzigen Funktionsaufruf initialisieren. Zum Beispiel, wenn die interne Zustand gibt es, die in Abhängigkeit von einer Kombination von Daten eingestellt werden muss, oder bei der Einstellung und Überschreiben des Standardwertes ist teuer. So wie bei allen „Muster“, verwenden Sie umsichtig und mit Vorbedacht.

Beantwortet am 22/01/2010 um 20:52
quelle vom benutzer

stimmen
1

JQuery tut genau dies. Von 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!');  
    }  
}); 

oder für Pre-1,4:

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

Ich habe auch ähnliche Dinge in C # zu erzeugen WPF in Code getan:

new StackPanel {
   Children = {
      new TextBlock { Text = "Hi there", Width = 50 },
      new TextBox { Width = 100 },
      new Border { 
          Content = new ListBox()
      }
   }
};
Beantwortet am 22/01/2010 um 21:46
quelle vom benutzer

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