如何重构用于初始化和更新的冗余代码

How to refactor the redundency codes for initiate and update?

本文关键字:更新 冗余 代码 初始化 用于 何重构 重构      更新时间:2023-09-26

下面是我在AngularJS中的控制器代码。

var dcApp = angular.module("dcApp", ["dcApp.services"])

dcApp.controller("filterController",["$scope", "filterService",
    function ($scope, filterService) {
        var filterSentData = {
            specie: "all",
            cellinfo: "all",
            factor: "all",
            hideincomplete: "show",
            keyword: "",
            clicked: null,
            page: 1
        }
        filterService.setFilterSentData(filterSentData)
        filterService.request().success(function (data, status) {
            $scope.species = data.species
            $scope.cellinfos = data.cellinfos
            $scope.factors = data.factors
            $scope.datasets = data.datasets
        })
        $scope.setFilter = function(key, content) {
            filterSentData[key] = content
            filterService.setFilterSentData(filterSentData)
            filterService.request().success(function (data, status) {
                $scope.species = data.species
                $scope.cellinfos = data.cellinfos
                $scope.factors = data.factors
                $scope.datasets = data.datasets
            })
        }

    }]);

可以发现,filterService.setFilterSentData(filterSentData)filterService.request().success代码段被使用了两次。一个用于初始化,另一个用于setFilter更改过滤器时的必要更新。。有人对重构代码的好方法有想法吗?

如果我想提取函数中的片段,我应该像$scope.myfunc = function()那样在$scope下创建函数,还是像var myfunc = function那样直接创建?

我像这样重构了它。。

var dcApp = angular.module("dcApp", ["dcApp.services"])

dcApp.controller("filterController",["$scope", "filterService",
    function ($scope, filterService) {
        var filterSentData = {
            specie: "all",
            cellinfo: "all",
            factor: "all",
            hideincomplete: "show",
            keyword: "",
            clicked: null,
            page: 1
        }
        var filterAjaxUpdate = function(sent) {
            filterService.setFilterSentData(sent)
            filterService.request().success(function (reply, status) {
                $scope.species = reply.species
                $scope.cellinfos = reply.cellinfos
                $scope.factors = reply.factors
                $scope.datasets = reply.datasets
            })
        }
        filterAjaxUpdate(filterSentData)
        $scope.setFilter = function(key, content) {
            filterSentData[key] = content
            filterAjaxUpdate(filterSentData)
        }

    }]);