复杂性大于 AngularJS 控制器中的授权(SonarLint 问题)
Complexity greater than authorized in AngularJS Controller (SonarLint issue)
我将 SonarLint 与 Eclipse 一起使用,并且我正在使用 AngularJS[ 编写应用程序=22=]。我的控制器有问题,所以我试图稍微清理一下以便看得更清楚,然后 SonarLint 向我弹出了一个问题:
Function has a complexity of 11 which is greater than 10 authorized.
这是我的控制器的代码:
app.controller('LauncherCtrl', function ($scope, $http) {
$scope.genStatus = "stopped";
$scope.startgenerator = function() {
$http.get('/start').success(function () {
$scope.updateStatus();
});
};
$scope.resumegenerator = function() {
$http.get('/resume').success(function () {
$scope.updateStatus();
});
};
$scope.suspendgenerator = function() {
$http.get('/suspend').success(function () {
$scope.updateStatus();
});
};
$scope.stopgenerator = function() {
$http.get('/stop').success(function () {
$scope.updateStatus();
});
};
$scope.updateStatus = function() {
$http.get('/status').success(function (response) {
$scope.genStatus = response.data;
});
};
$scope.updateStatus();
});
有什么问题吗?我假设这个问题是关于嵌套太多 loops/functions,但据我所知它不是(除了调用更新的函数 start/stop/resume/pause,但它不是复杂度 11,是吗?)。 + 我仔细检查了 brackets/parenthesis,我认为问题不在于此。
如果你想消除复杂性,你可以创建一个函数:
$scope.startgenerator = function() {
$http.get('/start').success(function () {
$scope.updateStatus();
});
};
$scope.resumegenerator = function() {
$http.get('/resume').success(function () {
$scope.updateStatus();
});
};
$scope.suspendgenerator = function() {
$http.get('/suspend').success(function () {
$scope.updateStatus();
});
};
$scope.stopgenerator = function() {
$http.get('/stop').success(function () {
$scope.updateStatus();
});
};
到
$scope.generatorAction = function(action) {
$http.get('/' + action).success(function () {
$scope.updateStatus();
});
};
然后像这样使用它:
$scope.generatorAction('stop');
或者使用处理您的 http 请求的服务,这是更好的做法。
编辑:
我正在为我的 angular 应用程序使用此样式指南:https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md
为您的 http 请求创建一个简单的服务:
(function() {
'use strict';
angular
.module('yourModuleName')
.factory('generator', generatorFactory);
function generatorFactory($http) {
var service = {
start: start,
resume: resume,
suspend: suspend,
stop: stop
}
return service;
function start() {
return $http.get('/start');
}
function resume() {
return $http.get('/start');
}
function suspend() {
return $http.get('/suspend');
}
function stop() {
return $http.get('/stop');
}
}
})();
然后在你的控制器中:
app.controller('LauncherCtrl', function ($scope, generator, $http) {
$scope.genStatus = "stopped";
$scope.startgenerator = function() {
generator.start().then(function () {
$scope.updateStatus();
});
};
$scope.resumegenerator = function() {
generator.resume().then(function () {
$scope.updateStatus();
});
};
$scope.suspendgenerator = function() {
generator.suspend().then(function () {
$scope.updateStatus();
});
};
$scope.stopgenerator = function() {
generator.stop().then(function () {
$scope.updateStatus();
});
};
$scope.updateStatus = function() {
$http.get('/status').success(function (response) {
$scope.genStatus = response.data;
});
};
$scope.updateStatus();
});
首先,您的应用程序似乎需要更多代码和更多复杂性,但如果您需要在其他页面或 component/directive 中停止生成器,您只需注入 'generator' 服务并执行 generator.stop();
并且通过这样做,如果有一天您的端点 url 发生了变化,您只需在您的服务中更改它们。
Is there something wrong with it?
您正在寻找 objective 主观问题的答案。假设函数变得越复杂,您(或其他人)就越难以维护它。这个问题告诉你你已经达到了代码可能变得难以理解的任意点。
it isn't complexity 11, is it?
SonarQube 计算复杂度的方式并不完全符合任何当前阐明的标准,但它是如何得到数字 11 的:
app.controller('LauncherCtrl', function ($scope, $http) { // +1
$scope.genStatus = "stopped";
$scope.startgenerator = function() { // +1
$http.get('/start').success(function () { // +1
$scope.updateStatus();
});
};
$scope.resumegenerator = function() { // +1
$http.get('/resume').success(function () { // +1
$scope.updateStatus();
});
};
$scope.suspendgenerator = function() { // +1
$http.get('/suspend').success(function () { // +1
$scope.updateStatus();
});
};
$scope.stopgenerator = function() { // +1
$http.get('/stop').success(function () { // +1
$scope.updateStatus();
});
};
$scope.updateStatus = function() { // +1
$http.get('/status').success(function (response) {// +1
$scope.genStatus = response.data;
});
};
$scope.updateStatus();
});
我将 SonarLint 与 Eclipse 一起使用,并且我正在使用 AngularJS[ 编写应用程序=22=]。我的控制器有问题,所以我试图稍微清理一下以便看得更清楚,然后 SonarLint 向我弹出了一个问题:
Function has a complexity of 11 which is greater than 10 authorized.
这是我的控制器的代码:
app.controller('LauncherCtrl', function ($scope, $http) {
$scope.genStatus = "stopped";
$scope.startgenerator = function() {
$http.get('/start').success(function () {
$scope.updateStatus();
});
};
$scope.resumegenerator = function() {
$http.get('/resume').success(function () {
$scope.updateStatus();
});
};
$scope.suspendgenerator = function() {
$http.get('/suspend').success(function () {
$scope.updateStatus();
});
};
$scope.stopgenerator = function() {
$http.get('/stop').success(function () {
$scope.updateStatus();
});
};
$scope.updateStatus = function() {
$http.get('/status').success(function (response) {
$scope.genStatus = response.data;
});
};
$scope.updateStatus();
});
有什么问题吗?我假设这个问题是关于嵌套太多 loops/functions,但据我所知它不是(除了调用更新的函数 start/stop/resume/pause,但它不是复杂度 11,是吗?)。 + 我仔细检查了 brackets/parenthesis,我认为问题不在于此。
如果你想消除复杂性,你可以创建一个函数:
$scope.startgenerator = function() {
$http.get('/start').success(function () {
$scope.updateStatus();
});
};
$scope.resumegenerator = function() {
$http.get('/resume').success(function () {
$scope.updateStatus();
});
};
$scope.suspendgenerator = function() {
$http.get('/suspend').success(function () {
$scope.updateStatus();
});
};
$scope.stopgenerator = function() {
$http.get('/stop').success(function () {
$scope.updateStatus();
});
};
到
$scope.generatorAction = function(action) {
$http.get('/' + action).success(function () {
$scope.updateStatus();
});
};
然后像这样使用它:
$scope.generatorAction('stop');
或者使用处理您的 http 请求的服务,这是更好的做法。
编辑:
我正在为我的 angular 应用程序使用此样式指南:https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md
为您的 http 请求创建一个简单的服务:
(function() {
'use strict';
angular
.module('yourModuleName')
.factory('generator', generatorFactory);
function generatorFactory($http) {
var service = {
start: start,
resume: resume,
suspend: suspend,
stop: stop
}
return service;
function start() {
return $http.get('/start');
}
function resume() {
return $http.get('/start');
}
function suspend() {
return $http.get('/suspend');
}
function stop() {
return $http.get('/stop');
}
}
})();
然后在你的控制器中:
app.controller('LauncherCtrl', function ($scope, generator, $http) {
$scope.genStatus = "stopped";
$scope.startgenerator = function() {
generator.start().then(function () {
$scope.updateStatus();
});
};
$scope.resumegenerator = function() {
generator.resume().then(function () {
$scope.updateStatus();
});
};
$scope.suspendgenerator = function() {
generator.suspend().then(function () {
$scope.updateStatus();
});
};
$scope.stopgenerator = function() {
generator.stop().then(function () {
$scope.updateStatus();
});
};
$scope.updateStatus = function() {
$http.get('/status').success(function (response) {
$scope.genStatus = response.data;
});
};
$scope.updateStatus();
});
首先,您的应用程序似乎需要更多代码和更多复杂性,但如果您需要在其他页面或 component/directive 中停止生成器,您只需注入 'generator' 服务并执行 generator.stop();
并且通过这样做,如果有一天您的端点 url 发生了变化,您只需在您的服务中更改它们。
Is there something wrong with it?
您正在寻找 objective 主观问题的答案。假设函数变得越复杂,您(或其他人)就越难以维护它。这个问题告诉你你已经达到了代码可能变得难以理解的任意点。
it isn't complexity 11, is it?
SonarQube 计算复杂度的方式并不完全符合任何当前阐明的标准,但它是如何得到数字 11 的:
app.controller('LauncherCtrl', function ($scope, $http) { // +1
$scope.genStatus = "stopped";
$scope.startgenerator = function() { // +1
$http.get('/start').success(function () { // +1
$scope.updateStatus();
});
};
$scope.resumegenerator = function() { // +1
$http.get('/resume').success(function () { // +1
$scope.updateStatus();
});
};
$scope.suspendgenerator = function() { // +1
$http.get('/suspend').success(function () { // +1
$scope.updateStatus();
});
};
$scope.stopgenerator = function() { // +1
$http.get('/stop').success(function () { // +1
$scope.updateStatus();
});
};
$scope.updateStatus = function() { // +1
$http.get('/status').success(function (response) {// +1
$scope.genStatus = response.data;
});
};
$scope.updateStatus();
});