【发布时间】:2015-03-04 14:24:48
【问题描述】:
我们正在尝试应用 John Papa 的AngularJS Style Guide 中列出的指南。
我们开始遵循的规则之一是Defer Controller Logic:
通过委托给服务和工厂来延迟控制器中的逻辑。
为什么?:逻辑可以被多个控制器重用。 服务并通过函数公开。
为什么?:服务中的逻辑可以更容易地在单元测试中隔离, 而控制器中的调用逻辑很容易被mock。
Why?:移除依赖项并隐藏实现细节 控制器。
这是我们过去通过将数据检索逻辑放入控制器而不是将其隔离在服务中而违反的。
现在我想让规则尽可能严格。理想情况下,如果配置的服务之一作为依赖项传递给控制器,我希望 Angular 抛出错误。是否可以在角度级别上解决,或者我应该尝试单独解决它 - 例如,使用自定义 ESlint 规则静态解决?
希望有任何见解或提示。
特别是下面的控制器违反了规则,因为它直接使用了$http service:
function OrderController($http, $q, config, userInfo) {
var vm = this;
vm.checkCredit = checkCredit;
vm.isCreditOk;
function checkCredit() {
var settings = {};
return $http.get(settings)
.then(function(data) {
vm.isCreditOk = vm.total <= maxRemainingAmount;
})
.catch(function(error) {
});
};
}
另外,如果我对代码质量过于担心/疯狂,请告诉我:)
【问题讨论】:
-
我会尝试使用 ESLint 并使用一个规则来阻止在控制器中使用 $http/$resource。我个人认为您应该在您的开发团队中进行讨论,并且在处理数据时让每个人都在同一页面上
标签: javascript angularjs angularjs-service angularjs-controller eslint