javascript - 为什么我应该将此 http 调用移至外部服务

标签 javascript angularjs

我还处于 angularjs 开发的早期阶段。

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

路线片段::

.when('/searchDrug/:searchStr', {
    templateUrl: SNIPsArray['searchresultsSNIP'],
    controller: 'searchDrugCtrl'
})

来自 Controller 的片段::

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 从 Controller 移动到服务。我正在寻求一些帮助,了解为此调用添加另一个级别和另一个文件的优点是什么?

最佳答案

可维护性

随着您的应用程序的增长,您会发现越来越需要将业务逻辑封装在某个地方。在 Angular 中,您可以使用服务来完成此操作。

封装

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

更丰富的域名

还需要注意的是,您可能希望在从服务返回的内容之上引入一些额外的建模和功能。使用服务,您可以执行 http 调用之类的操作,然后将结果包装在带有一些方法的函数中。这会产生更丰富的领域模型和可读的代码。

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

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

测试

为依赖于服务的 Controller 编写测试并单独测试服务显然要好得多。

关于javascript - 为什么我应该将此 http 调用移至外部服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21679243/

相关文章:

javascript - 用另一个 Javascript 调用停止 Javascript 函数?

javascript - 使用 angularJS 显示密码的最后三个字符

javascript - ng-model 默认正确,但 select 不会显示文本,而是显示空白

javascript - AngularJS Promise 被拒绝而不等待异步响应(它应该解决)

javascript - 单击某处时隐藏弹出窗口

javascript - jQuery 查找 <th></th> 不为空且具有特定类名

angularjs - 回调错误范围

javascript - Protractor:获取 DOM 元素的底层 JS 对象

javascript - 垂直居中一个div

javascript - 数据表中的列排序问题