IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

Creation d'une librairie


Sujet :

AngularJS

  1. #1
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut Creation d'une librairie
    Bonjour,

    Je souhaite pour mon application angularJs creer une librairie/class de message afin de pouvoir l'utiliser dans toute mon appli. Quelle est la meilleur facon de faire ?

    J'avais juste pensé à faire un nouveau fichier .js avec ce genre de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var monNameSpace = new function() {
        var internalFunction = function() {
        };
        this.publicFunction = function() {
        };
    };
    monNameSpace --> afin d'isoler mon code.

    Mais comme dans cette librairie je vais devoir passer en parametre des dependances du style $scope, $timeout, $route..... Je me demande si c'est la meilleure facon de faire.

    merci pour vos conseils.

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Quelle est la meilleur facon de faire ?
    Tu crées un service.

  3. #3
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    Merci pour ce lien.

    On preconise aussi un service pour toute la couche metier. Un service est un singleton est ce vraiment la meilleure solution ?

    Dans d'autre language comme c# ou java, pour la couche metier il n'est pas recommander de faire des singletons mais avoir des instances.

    Quelle est votre avis ?

  4. #4
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par topolino Voir le message
    Dans d'autre language comme c# ou java, pour la couche metier il n'est pas recommander de faire des singletons mais avoir des instances.
    C'est pour des raisons d'accès concurrentiels dans un contexte multi-threadé (puisqu'un singleton n'est au final qu'une variable static). Ce n'est donc pas applicable dans un front-end javascript.

    Citation Envoyé par topolino Voir le message
    On preconise aussi un service pour toute la couche metier. Un service est un singleton est ce vraiment la meilleure solution ?
    En fait on préconise d'avoir le maximum de code dans les services. Les contrôleurs ne doivent contenir que des appels et du binding, toute la logique doit être dans les services.

    Du fait du système d'injection de dépendances d'angular il est alors très facile de tester le code et également de mutualiser le code et les données.

    Par exemple pour gérer des messages tu pourrais avoir un service contenant les messages :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    angular.module('myApp').value('messageArray', []);
    Et un service contenant le code de manipulation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    angular.module('myApp').value('messageHelper', {function1: function() {}, function2: function() {}});
    Ou sous forme de factory c'est le cas le plus fréquent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    angular.module('myApp')
      .factory('messageHelper', function (dependance1, dependance2) {
     
            return {
                fonction1: function(param1, param2) {
                    // impl fonction1
                },
                fonction2: function(param1, param2) {
                    // impl fonction2
                }
            };
      });
    Et un dernier service pour les appels à ton backend.

    Un exemple de gestion de notifications qui pourrait t'inspirer. C'est la partie service qui t'intéressera.

    Citation Envoyé par topolino Voir le message
    Quelle est votre avis ?
    C'est pas vraiment mon avis, c'est un consensus dans la communauté Angular qu'il est préférable d'avoir 99% de son code dans les services (testabilité, ré-utilisabilité, atomicité donc lisibilité, ...).

    Je constate que le premier réflexe lorsqu'on débute c'est d'avoir des contrôleurs obèses avec plein de fonction dans le $scope et d'avoir des fonctions globales dans le $rootScope. Ça devient vite ingérable et c'est une connerie. Utiliser les services rend l'application beaucoup plus claire.

  5. #5
    Membre confirmé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Points : 637
    Points
    637
    Par défaut
    Vraiment merci pour tes explications.

    En ce qui concerne la separation des couches y a pas de soucis, je mets tres peu de chose dans le controlleur. C'est juste que cherche les bonnes pratiques.

    Par contre faut que je me renseigne plus sur les difference entres services factory, value.......

  6. #6
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par topolino Voir le message
    C'est juste que cherche les bonnes pratiques.
    Tout mettre dans les services c'est la bonne pratique

    Citation Envoyé par topolino Voir le message
    Par contre faut que je me renseigne plus sur les difference entres services factory, value.......
    T'as un très bon tuto ici.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XCode] creation d'une librairie static
    Par sdplayer dans le forum XCode
    Réponses: 3
    Dernier message: 29/03/2013, 10h59
  2. Creation d'une librairie SAS
    Par koulifanya dans le forum SAS Base
    Réponses: 2
    Dernier message: 05/11/2012, 13h20
  3. Creation d'une librairie statique
    Par Kaldwin dans le forum Débuter
    Réponses: 0
    Dernier message: 14/12/2010, 00h10
  4. Creation d'une librairie
    Par dz_robotix dans le forum C++Builder
    Réponses: 1
    Dernier message: 10/04/2007, 17h25
  5. creation d'une dll appelant une autre librairie
    Par nezdeboeuf62 dans le forum Windows
    Réponses: 5
    Dernier message: 23/03/2007, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo