Bonne Architecture de Modules AngularJs

Tous les développeurs d'AngularJs connaissent les modules Angular et comprennent ce que sont les DI, mais parfois, dans la pratique, il y a des situations où il faut créer une architecture pour les modules AngularJs.

Voyons quel problème on a.

angular.module( 'Movie', ['Actor'])    // Dans ce module on a besoin d'actor
    .factory('getMovies',...);
angular.module( 'Actor', ['Movie'])    // Dans ce module on a besoin des Movies
    .factory('getActors',...);

//    Mais allons-nous avoir un DI circulaire
//    Que faire?

Chaque développeur peut proposer sa solution, mais il y a vraiment beaucoup de développeurs qui proposent les mêmes solutions. Alors, quelle est la solution? Que faire?

La solution est la suivante : Nous créons des modules qui ne sont pas du type Model / Entity. Nous créons nos modules comme une fonctionnalité, à savoir si nous avons des contrôleurs (pour plus d’un module), des directives ou des services, nous créons un module comme cela:

angular.module('MoviesManager',[])
   .factory('MoviesManager',....);
anfular.module('ActorsManager',[])
    .factory('ActorsManager',...);

// Si on a besoin d'un module Movie, alors
angular.module('Movie',['MoviesManager','ActorsManager'...]) // ici on peut utiliser Manager pour obtenir/définir etc. movies 

// Si on a besoin d'un module Actor, alors
angular.module('Actor',['ActorsManager','MoviesManager',...]) // ici on peut utiliser  Manager pour obtenir/définir etc. actors

angular.module('Theatre', ['Actor', 'Movie',..]) // on utilise ces modules seulement

Comme vous le voyez, nous n'aurons aucune DI circulaire ni aucun autre problème. Cette solution est flexible et très utile.