2014-10-25 2 views
0

Я разрабатываю приложение с большим интерфейсом в angularjs.AngularJS и javascript oop

Интересно, можно ли использовать этот подход в angularjs и, если есть дыры, проблемы с производительностью или другие недостатки.

первый код в контроллере

function ServiceHandler() { 

     var self = this; 
     self.init(); 

    } 
    ServiceHandler.prototype = { 
     constructor : ServiceHandler, 
     request : undefined, 
     init : function(){ 

      self.callService(); 

     }, 
     createRequest : function() { 

      self.request = {}; 
      self.request = Service.getRequest(); 

     }, 
     callService : function() { 

      self.iAmLoading = true; 
      self.createRequest(); 
      Service.callService(self.request).then(function(response) { 
        self.iAmLoading = false; 
        if (angular.isDefined(response) && angular.isDefined(response.data)) { 
         self.handleRequest(response); 
        } 
       }, function(error) { 
        self.handleSystemError(error); 
       }); 

     }, 
     handleRequest : function(response) { 

      if (angular.isUndefined(self.response)) { 
        self.response = {}; 
      } 
      if (angular.isUndefined(response.data)) { 
        self.handleError(response); 
      }else { 

      self.response = response.data; 

      } 
      }, 
      handleSytemError : function(error) { 
       // show 404 
      }, 
      handleError : function(response) { 
       // think on what to do with your response 
      } 
    } 

тогда я связан его с помощью метода контроллера инициализации

$scope.init(){ 
    $scope.myServiceHandler = new ServiceHandler(); // in this manner i call the service first time because the constructor call the init method on my ServiceHandler object also 

} 

я связан его в DOM с

<div ng-controller="myController" ng-init="init()"> 

и в HTML я могу сослаться на мой ответ obect с:

{{myServiceHandler.response.myResponseProperty}} 

и если я хочу боты для вызова к моей службы я могу сделать:

<button ng-click='myServiceHandler.callService()'></button> 

Лично Я думаю, что преимущество этой структуры заключается в организации кода и что эта структура кажется более ориентированной на изобретение и более интересной для достижения

сообщите мне, что d вы думаете. спасибо и привет Антонио

PS - я пишу этот код на этот вопрос, я пишу это на лету, я думаю, что это работа, но я не 100%, конечно, это не проверял :) я писал другой Контролеры, подобные этому, сейчас находятся в производстве и, похоже, работают нормально.

PS2 - exuse меня за мой английский, я учусь сейчас, и у меня есть только 1500 XP на Duolingo сейчас :) :)

+0

Этот вопрос кажется более подходящим для http://codereview.stackexchange.com/ –

ответ

0

Насколько я знаю, если вы идете с этим подходом, вы можно использовать Angular's Service Provider. За исключением того, что вы действительно хотите создать новый object каждый раз, когда вызывается контроллер с областью с кодом $scope.myServiceHandler = new ServiceHandler();. Я сомневаюсь, что ваш конструктор ServiceHandler является чем-то необходимым, потому что с использованием метода Anggular's controllers я предпочитаю использовать одиночные игры, а не конструктор, потому что контроллер обычно называют более одного раза.

+0

Отлично, я думаю, но он стал «singleton», не так ли? Поэтому я по-прежнему предпочитаю использовать сервисы Angular для работы с одиночными играми. Это более читаемо, также все еще приемлемо в точке зрения ООП. Так же, как современные языки, такие как Scala, Ruby, Python и т. Д. Объект может быть создан только для создания одного объекта. Но это просто вкус предпочтений, я думаю. –

0

Я бы предложил использовать вместо контроллера жесткого кодирования сервис-обработчик, обычно это код и функциональные возможности, которые вы будете повторно использовать в приложении, поэтому, если вы разрабатываете огромное приложение на передней панели, я бы установил, что обслуживание на заводе.

После этого вы будете вводить службу в контроллеры там, где это необходимо.

Преимущества создания службы/завода:

  • легко проверить
  • Простота в обслуживании и масштаб
  • Является более объектно-ориентированное
  • одного экземпляра для всех Yours контроллеров (лучше использование памяти)
  • Более элегантный .. (если ваш босс - элегантный парень кода)

    Представьте, что вам нужен этот serviceHandler в другом контроллере, и в конце вы имеете это жестко закодированное в каждом контроллере. Если вам нужно изменить/расширить serviceHandler, вам нужно будет сделать это для каждого контроллера, но если вы используете завод, вы сделает это один раз в определении службы.

При создании serviceHandler с завода контроллер будет выглядеть следующим образом:

theApp.controller('controller', ['$scope','serviceHandler', function($scope, serviceHandler){ 
    serviceHandler.init(); // is practically the same of ng init 
    $scope.recall = serviceHandler.callService; 
}]); 

Таким образом, вы бы модифицировать serviceHandler, и вы бы вводить этот serviceHandler в каждом контроллере, который будет использовать его .. ваш код для службы в порядке, но лучше создать службу на фабрике/услуге/поставщике вместо жестко закодированной службы в каждом контроллере, поскольку это один экземпляр, и вы будете повторно использовать код и сохраните память.