Bonsoir à tous,
Analyste développeur orienté POO (Java essentiellement) et DB Oracle (PL/SQL), j'utilise et appréhende depuis plusieurs mois le langage Javascript.
Pour un projet commençant à prendre de l'importance, je m'efforce de nettoyer les erreurs maladroites et mauvaises pratiques qui se trouve dans le code.
Un des points important étant l'utilisation de fonction globales...
Seulement, après énormément de temps passer à lire sur ce sujet, j'ai appris de nombreuses choses mais certains avis semblent en contradiction et ma vision n'est toujours pas très claire quant à la syntaxe à adopter.
Pour m'aider, pourriez-vous me donner votre avis sur le petit exemple de code ci-dessous (qui fonctionne mais nécessite la librairie jquery layout). Est-il correct d'un point de vue bonne pratique? Si non, pourquoi et comment l'écririez-vous?
fichier loadcore.js
fichier layout.js
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 var ns_app = ns_app || {}; ns_app.createNS("ns_app.core"); $(document).ready(function () { var layout = new ns_app.core.JQUILayout(true); layout.defineMainLayout(); });
Ce qui me parait nécessaire dans le code si j'ai bien compris les bonnes pratiques :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 (function($) { ns_app.core.JQUILayout = function(defStyles) { this.defStyles = defStyles; } ns_app.core.JQUILayout.prototype.defineMainLayout = function() { $("body").layout({ applyDefaultStyles: this.defStyles }); } })(jQuery);
- l'utilisation de namespaces (en l'occurence deux niveaux ici).
- l'utilisation de prototype pour ne pas dupliquer les instances de méthodes.
- l'utilisation d'une fonction anonyme exécutée automatiquement pour limiter la portée du code.
Ce qui me dérange d'après ce que j'ai lu (mais peut-être mal compris) :
- on conseille de toujours précéder la déclaration d'une fonction ou d'une variable par var, mais cette notation ne le permet pas (var ns_app.core.JQUILayout = function... ne fonctionnera pas).
- Cette syntaxe permet-elle d'avoir des variables et méthodes privées? Si oui comment? ou le tout est-il privé? Dans quel cas comment rendre une partie publique?
- On déconseille l'utilisation de new pour créer un nouvel objet, mais je ne vois pas comment me passer de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part var layout = new ns_app.core.JQUILayout(true);
Beaucoup d'exemples utilisent la notation littérale, mais il me semble que cette syntaxe ne permet pas l'utilisation de prototype et donc induit le duplication des méthodes.
Qui plus-est, je souhaite pouvoir séparer le code d'un même sous-namespace (ns_app.core) en plusieurs fichiers. Et il ne me semble pas avoir vu de solution avec cette notation.
Voilà, cela me serait déjà d'une aide précieuse si vous pouviez m'éclairer par rapport à tout cela. Et si vous remarquez d'autres choses à éviter, n'hésitez pas à le signaler.
Un grand merci d'avance.
Max.
Partager