Est-ce que quelqu'un conception api ou code de la bibliothèque de cette façon?

voix
2

J'ai lu certaines choses sur la façon de concevoir une bibliothèque ou API bien, et trébuché à travers une grande conférence à Google Tech pourparlers de Joshua Bloch. Maintenant, même si je suis loin d'être un développeur API professionnel, je pense que la programmation d'un groupe de classes / fonctions est similaire, bien que beaucoup version réduite de la même chose - la séparation nette des actions, la facilité et l'utilisation agréable, encourageant code propre , etc.

Je traversais un code Java open source largement utilisé et ai eu cette idée (rien de nouveau, mais juste de le mettre en place lucidement ...)

Prenons un exemple pseudo - code (ou peut - être un dialecte de BASIC):

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

Maintenant , inspiré par le code Java Je veux être en mesure de faire quelque chose comme ceci:

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

Ma question est la suivante:
Est -ce que quelqu'un d' autre API de conception à partir de pseudo-code comme celui - ci?

Est - ce une bonne idée pour un petit quelque chose? Dites jusqu'à 10 classes chacun avec peut - être 10 méthodes, chaque méthode pas plus que 5-6 code de lignes à l' intérieur. C'est évidemment juste un ensemble approximatif de nombres pour montrer la taille des classes à concevoir - nulle part près d'une API complète et non pas seulement un projet passe - temps - un ensemble professionnel qui fait quelque chose de petit , mais le fait bien .

Quelqu'un at-il trouvé de sérieux inconvénients à cette approche?

Je pense que l' un réel avantage est qu'il vous oblige à écrire votre premier cas d' utilisation .

L'autre chose est que les noms et les verbes restent simples , ce qui permet à votre produit final d'esquiver le MultiPhraseAbstractParadigmDesignPatternImplementor syndrome :-D

Créé 22/01/2010 à 20:40
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
0

Oui, cela est la façon dont jQuery est conçu, il finit toujours par se retourner afin que vous puissiez les méthodes de la chaîne comme celle-ci.

Créé 22/01/2010 à 20:42
source utilisateur

voix
0

J'ai tendance à commencer par les classes vides et méthodes. Son vraiment une question de haut en bas par rapport design bas vers le haut.

Je préfère vraiment un énorme croquis de tableau blanc bien.

Créé 22/01/2010 à 20:45
source utilisateur

voix
3

Ceci est un modèle de conception assez commun appelé une interface fluide . Il est courant dans les langages fonctionnels et gagne en popularité ailleurs. Je l' ai vu dans le schéma.

C'est un langage très pratique et facile à lire, mais rappelez-vous qu'il y aura souvent des moments où vous ne souhaitez réellement initialiser plus d'une variable dans un seul appel de fonction. Par exemple, quand il y a état interne qui doit être réglée en fonction d'une combinaison de données, ou lors de la configuration et écrasez les valeurs par défaut est coûteuse. Ainsi, comme avec tous les « modèles », utiliser judicieusement et avec préméditation.

Créé 22/01/2010 à 20:52
source utilisateur

voix
1

Jquery fait exactement cela. De 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!');  
    }  
}); 

ou pour la pré-1.4:

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

J'ai aussi fait des choses semblables en C # générer WPF dans le code:

new StackPanel {
   Children = {
      new TextBlock { Text = "Hi there", Width = 50 },
      new TextBox { Width = 100 },
      new Border { 
          Content = new ListBox()
      }
   }
};
Créé 22/01/2010 à 21:46
source utilisateur

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