AngularJS - 组织大型服务&功能

时间:2014-04-29 13:06:39

标签: angularjs service architecture code-organization

在我的服务组织方面,老实说我不能想到 单向

我有一个大型服务,它定义了许多方法,包括验证大型对象的目的。功能非常复杂,所以我想将这个方法分成一口大小。

我该怎么做?我可以想到多种方法来实现这一目标:


创建一个帮助服务,其唯一目的是提供验证功能

这可能是最优雅的方式,但是它会使我的应用程序膨胀其他服务


将其保留在当前服务中,只需拆分方法

这将导致一个非常大的验证方法,与其他方法一起生成,创建一个庞大的服务:

app.service('serv',function(){

    return{

        someFunc: function(){
            // ...
        },

        // some more functions

        _validate: function(options){

            // call each function defined below

            function a(){
                // ...
            }

             function b(){
                // ...
            }

             function c(){
                // ...
            }
        }

});

直接在当前服务上定义私有方法

考虑到上面的例子,我还可以直接在服务上定义函数 a - c 。也不太优雅

那么这里的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

请原谅我的语法或compialtion错误,因为我在这里直接输入。

首先,我希望你的意思是工厂而不是服务,因为你不会在服务中返回对象。

另外,希望我能正确理解你的问题,所以你不想注入帮助服务,只是在同一个服务中组织代码,是吗? 我能想到的一种方法是,将它包装在IIFE下,这将有助于使所有变量和函数成为私有

一些提示,作为最佳做法,请避免在窗口或全局范围内创建var应用程序并在其他任何地方引用它,它会污染全局范围;其次,当您的应用程序变大并且您无法跟踪时,它可能会产生冲突变量创建。如果您需要获取模块,请使用angular.module(' yourAppName'),如下所示。

(function(){

// define your variables or functions here, 
// All of them will be in the scope of the above function and
// outside functions cannot excess it or you can do the same inside the MyFactory function

angular.module('yourAppName').factory('myFactory', MyFactory);

function MyFactory(){
  var factory = {};  

  // some local variables
   var a, b, c;

 // some local functions,

    someFunc: function(){
            // ...
        },

    // some more functions

        _validate: function(options){

            // call each function defined below

            function a(){
                // ...
            }

             function b(){
                // ...
            }

             function c(){
                // ...
            }
    }

  // add the functions you want to expose to be called by the controllers or any objects where you have injected the factory. 
    factory.funcA = function(){   }

   return factory;
  }
})();