Υπάρχει κάποιος που σχεδιάζουν api ή κώδικα της βιβλιοθήκης με αυτόν τον τρόπο;

ψήφοι
2

Διάβαζα κάποια πράγματα για το πώς να σχεδιάσουν μια βιβλιοθήκη ή API καλά, και σκόνταψε σε μεγάλη συζήτηση Joshua Bloch κατά της Google Tech συνομιλίες. Τώρα αν είμαι πουθενά κοντά σε ένα επαγγελματία προγραμματιστή API, νομίζω ότι τον προγραμματισμό ένα σωρό κατηγορίες / λειτουργίες είναι παρόμοια, αν και πολύ κλίμακα-κάτω εκδοχή του ίδιου πράγματος - σαφή διαχωρισμό των δράσεων, την ευκολία και ευχάριστη χρήση, ενθαρρύνοντας καθαρό κώδικα , και τα λοιπα.

Πήγαινα μέσω κάποιας χρησιμοποιείται ευρέως ανοικτού πηγαίου κώδικα Java και πήρε αυτή την ιδέα (κάτι καινούργιο, αλλά απλά να βάλει επάνω διαύγεια ...)

Ας πάρουμε ένα παράδειγμα ψευδοκώδικαίσως και κάποια διάλεκτο της BASIC):

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

Τώρα, εμπνευσμένο από τον κώδικα Java θα ήθελα να είναι σε θέση να κάνει κάτι σαν αυτό:

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

Το ερώτημά μου είναι το εξής:
Υπάρχει κάποιος άλλος APIs σχεδιασμό, αρχής γενομένης από ψευδο-κώδικα όπως αυτό;

Είναι μια καλή ιδέα για κάτι μικρό; Πείτε μέχρι 10 μαθήματα το καθένα με ίσως 10 διαφορετικές μεθόδους, κάθε μέθοδος όχι περισσότερο από ό, τι 5-6 γραμμές κώδικα μέσα σε αυτό. Αυτό είναι προφανώς μόνο μια πρόχειρη σύνολο αριθμών για να δείξει το μέγεθος των τάξεων πρέπει να σχεδιαστεί - πουθενά κοντά σε ένα πλήρες API και όχι μόνο ένα έργο χόμπι - ένα επαγγελματικό πακέτο που κάνει κάτι μικρό, αλλά το κάνει καλά .

Έχει κάποιος βρεθεί κάποια σοβαρά μειονεκτήματα σε αυτή την προσέγγιση;

Νομίζω ότι το ένα πραγματικό όφελος είναι ότι σας αναγκάζει να γράψετε περιπτώσεις χρήσης σας πρώτα .

Το άλλο πράγμα είναι ότι τα ουσιαστικά και τα ρήματα να μείνουν απλές , ώστε το τελικό προϊόν σας για να αποφύγει το MultiPhraseAbstractParadigmDesignPatternImplementor σύνδρομο :-D

Δημοσιεύθηκε 22/01/2010 στις 20:40
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
0

Ναι, αυτός είναι ο τρόπος που jQuery έχει σχεδιαστεί, καταλήγει πάντα επιστρέφει το ίδιο, ώστε να μπορείτε να τις μεθόδους αλυσίδα σαν αυτό.

Απαντήθηκε 22/01/2010 στις 20:42
πηγή χρήστη

ψήφοι
0

Τείνω να ξεκινήσετε με άδειο κλάσεις και μεθόδους. Πραγματικά ένα ζήτημα πάνω προς τα κάτω vs κάτω προς τα πάνω σχεδιασμού.

Προτιμώ πραγματικά μια τεράστια σκίτσο πίνακα όμως.

Απαντήθηκε 22/01/2010 στις 20:45
πηγή χρήστη

ψήφοι
3

Αυτό είναι ένα αρκετά κοινό μοτίβο που ονομάζεται άπταιστα διεπαφή . Είναι κοινό σε λειτουργικές γλώσσες και κερδίζει δημοτικότητα σε άλλο σημείο. Το είδα για πρώτη φορά στο Σχέδιο.

Είναι ένα πολύ βολικό και ευανάγνωστη γραφή, αλλά να θυμάστε ότι συχνά θα υπάρχουν στιγμές όπου πραγματικά θέλουν να προετοιμαστεί περισσότερες από μία μεταβλητή σε μία κλήση. Για παράδειγμα, όταν υπάρχει εσωτερική κατάσταση που πρέπει να ρυθμιστεί ανάλογα με τον συνδυασμό των δεδομένων, ή κατά τον καθορισμό και αντικατάσταση προεπιλεγμένες τιμές είναι δαπανηρή. Έτσι, όπως και με όλα τα «σχέδια», χρησιμοποιούν με σύνεση και με σύνεση.

Απαντήθηκε 22/01/2010 στις 20:52
πηγή χρήστη

ψήφοι
1

JQuery κάνει ακριβώς αυτό. Από 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!');  
    }  
}); 

ή για προ-1.4:

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

Επίσης έχω κάνει παρόμοια πράγματα σε C # δημιουργία WPF με κωδικό:

new StackPanel {
   Children = {
      new TextBlock { Text = "Hi there", Width = 50 },
      new TextBox { Width = 100 },
      new Border { 
          Content = new ListBox()
      }
   }
};
Απαντήθηκε 22/01/2010 στις 21:46
πηγή χρήστη

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