splincodewd
@splincodewd
Developer

Правильно ли я составил класс взаимодействия с сервером?

Взяли на работу junior(ом), дали задание написать класс для взаимодействия с сервером, при этом, чтобы вытаскивал нам JSON и сразу представлялся в виде объекта JS
Сам проект работает на Materialize (+jQuery) + Angular

Поэтому я сделал так: на jQuery
/*
   // инициализация объекта
   // service = new HttpServer(@address);
   var service = new HttpServer("http://192.168.137.57/blackbox/service.svc/");

   // запрос на вход в систему
   service.login(@login, @password).then(foo);  
    
   // получение списка типов процессов доступных пользователю для запуска   
   service.processtypes().then(foo); 

   // создание процесса  
   service.processcreate().then(foo); 

   // получение моих процессов  
   service.myprocessesget().then(foo); 

   // получение шагов процесса
   service.myprocessstepsget().then(foo); 

*/

var HttpServer = function(adress){

    "use private";

    var host = adress;

    function sendAjax(url, callback){
        $.ajax({
            url: host + url,
            dataType: 'JSON',
            jsonpCallback: 'callback',
            type: 'GET',
            success: function( data ) {
                callback(data);
            }
        });
    }

    "use public";

    this.login = function(login, pass){
        this.then = function(callback){      
            sendAjax(("login?login=" + login + "&password=" + pass), callback);      
        }; return this;
    }

    this.processtypes = function(){
        this.then = function(callback){      
            sendAjax(("processtypes/get"), callback);      
        }; return this;
    }

    this.processcreate = function(id){
        this.then = function(callback){      
            sendAjax(("process/create/" + id), callback);      
        }; return this;
    }

    this.myprocessesget = function(id){
        this.then = function(callback){      
            sendAjax(("processes/get"), callback);      
        }; return this;
    }

    this.myprocessstepsget = function(id){
        this.then = function(callback){      
            sendAjax(("processes/" + id + "/processsteps/get"), callback);      
        }; return this;
    }

};


Хочу развиваться в JS-программировании, подскажите как лучше сделать, может вообще на angular $http перевести (но для этого тоже класс тогда надо написать)?
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
SkryabinD
@SkryabinD
Программирование, управление проектами.
У вас все запросы в GET, хотя тот же /process/create по хорошему должен быть в POST. Метод sendAjax сильно ограничен - туда не передать параметры запроса. Я бы не стал выделять отдельно обращение к серверу в sendAjax, а использовал бы в каждом методе $http.get или $http.post - это более гибко получится, а кода столько же, если не меньше.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
splincodewd
@splincodewd Автор вопроса
Developer
Вообщем, так и реализовал:
/*

// инициализация объекта
   var server = new ClientServer(@address);
   server = new ClientServer("http://192.168.137.57/blackbox/service.svc/")

   // запрос на вход в систему
   server.login(@login, @password, function(req){
    $http.get(req).then(foo);
   });  
    
   // получение списка типов процессов доступных пользователю для запуска   
   server.processtypes(function(req){
    $http.get(req).then(foo);
   }); 
	
   // получение моих процессов
   server.myprocessesget(function(req){
    $http.get(req).then(foo);
   });

   // создание процесса  
   server.processcreate(@process_id, function(req){
	$http.get(req).then(foo);
   }); 

   // получение шагов процесса
   server.myprocessstepsget(@process_id, function(req){
	$http.get(req).then(foo);
   }); 

*/

    var ClientServer = function(base_url){
        "use private";
        var url = base_url;

        "use public";
        this.login = function(login, password, callback){
            callback(url + "login?login=" + login + "&password=" + password);
        }

        this.processtypes = function(callback){
            callback(url + "processtypes/get");
        }

        this.myprocessesget = function(callback){
            callback(url + "processes/get");
        }

        this.processcreate = function(id, callback){
            callback(url + "process/create/" + id);
        }

        this.myprocessstepsget = function(id, callback){
            callback(url + "processes/" + id + "/processsteps/get");
        }

    };
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы