为什么我应该将此http调用移动到外部服务

时间:2014-02-10 14:01:06

标签: javascript angularjs

我在我的angularjs开发中很早。

我创建了一个单页应用。有几个区域调用控制器,其中嵌入了如下代码。

来自路线::

片段

.when('/searchDrug/:searchStr', {
    templateUrl: SNIPsArray['searchresultsSNIP'],
    controller: 'searchDrugCtrl'
})
来自控制器的

片段::

function ($scope, $http, $routeParams, $location) {         
  $http.get(url).success(function(data) {

    if ( data.drugmaster.length == 1 ){
       $location.path('/fetchDrug/'+data.drugmaster[0].drug_Id);
       return;
    }
    $scope.druglist = data.drugmaster;
  });
}

问题: 在angularjs网站上查看并阅读一些关于最佳实践的文章,建议将$ http从控制器移动到服务。我正在寻找一些帮助,为这次调用添加另一个级别和另一个文件的优势是什么?

2 个答案:

答案 0 :(得分:1)

<强>可维护性

随着应用程序的增长,您会发现越来越需要在某处封装业务逻辑。在角度,你使用服务做到这一点。

<强>封装

服务不仅允许您重用代码,还引入了抽象和封装等良好原则。

更丰富的域名

值得注意的是,您可能希望在服务中获得的内容之外引入一些额外的建模和功能。使用服务,您可以执行诸如http调用之类的操作,然后将结果包含在函数中,并使用某些方法。这导致更丰富的域模型和可读代码。

例如,这里搜索函数返回一个带有一些域逻辑的promise来按摩从服务返回的数据:

function ($scope, $routeParams, $search) {  
  $search($scope.drug)
    .then(function(result){
        $scope.drugList = result.getDrugList({include: ['title', 'description']});
    });
}

<强>测试

为控制器编写测试显然要好得多,后者依赖于服务并自行测试服务。

答案 1 :(得分:0)

由于代码重用,可维护性和可测试性。测试资源是一个独立的过程,而不是测试整个控制器。