[javascript] AngularJS : 공장이란?

저는 많은 작업을 해왔고 Angular.js전반적으로 흥미롭고 강력한 프레임 워크라고 생각합니다.

서비스 대 공장 대 공급자 대 가치에 대해 많은 논의가 있었음을 알고 있지만 여전히 a Factory가 무엇인지 꽤 혼란 스럽습니다 .

Factory는 다른 StackOverflow 토론에서 다음과 같이 정의되었습니다.

공장

구문 : module.factory( 'factoryName', function );결과 : factoryName을 주입 가능한 인수로 선언하면 module.factory에 전달 된 함수 참조를 호출하여 반환되는 값이 제공됩니다.

이 설명은 이해하기가 매우 어렵고 공장이 무엇인지에 대한 이해를 높이 지 않습니다.

a Factory가 정확히 무엇 Service이며 Provider, 또는 기타 대신 사용해야하는 이유 에 대해 공유 할 수있는 설명이나 실제 사례가 있습니까?

최신 정보

A service 모든 객체에 대한 참조보유 합니다 .

A factory 모든 객체 를 반환 하는 함수 입니다.

A provider 모든 함수 를 반환하는 함수입니다.



답변

내가 이해하는 바에 따르면 그들은 모두 거의 동일합니다. 주요 차이점은 복잡성입니다. 공급자는 런타임에 구성 할 수 있고 공장은 좀 더 강력하며 서비스는 가장 간단한 형태입니다.

이 질문을 확인하십시오 AngularJS : 서비스 대 공급자 대 공장

또한이 요지 는 미묘한 차이를 이해하는 데 도움 이 될 수 있습니다.

출처 : https://groups.google.com/forum/#!topic/angular/hVrkvaHGOfc

jsFiddle : http://jsfiddle.net/pkozlowski_opensource/PxdSP/14/

저자 : Pawel Kozlowski

var myApp = angular.module('myApp', []);

//service style, probably the simplest one
myApp.service('helloWorldFromService', function() {
    this.sayHello = function() {
        return "Hello, World!";
    };
});

//factory style, more involved but more sophisticated
myApp.factory('helloWorldFromFactory', function() {
    return {
        sayHello: function() {
            return "Hello, World!";
        }
    };
});

//provider style, full blown, configurable version     
myApp.provider('helloWorld', function() {
    // In the provider function, you cannot inject any
    // service or factory. This can only be done at the
    // "$get" method.

    this.name = 'Default';

    this.$get = function() {
        var name = this.name;
        return {
            sayHello: function() {
                return "Hello, " + name + "!";
            }
        };
    };

    this.setName = function(name) {
        this.name = name;
    };
});

//hey, we can configure a provider!            
myApp.config(function(helloWorldProvider){
    helloWorldProvider.setName('World');
});


function MyCtrl($scope, helloWorld, helloWorldFromFactory, helloWorldFromService) {

    $scope.hellos = [
        helloWorld.sayHello(),
        helloWorldFromFactory.sayHello(),
        helloWorldFromService.sayHello()];
}​


답변

한 가지 주요 차이점은 공장에서 사용자 지정 코드를 실행할 수 있다는 것입니다. 그러나 서비스에서는 객체 생성 만 발생합니다.

myJs.factory('Factory', function() {

    //Write custom code here

    return {
            Hello: function() {
            return "Hello, World!"
        }
    };
});


답변

이 주제에 대한 나의 2 센트. 저는 매우 초보이며 Angular JS를 이해하는 데 관심이 많았습니다. 이것은 저를 많이 혼란스럽게 만든 것 중 하나 였기 때문에 다소 자세히 연구했습니다. 나는 인터뷰를 위해 메모를 해왔고 이것은 다른 사람들에게 유용 할 수 있습니다.

  • 서비스와 공장은 다른 방식으로 같은 일을합니다.
  • 둘 다 주사제입니다
  • 대부분의 경우 팩토리 구문을 사용합니다.
  • 이해하기 쉬움
  • 요즘 es6 “service”는 es6 클래스로 더 잘 변환되기 때문에 수행됩니다.
  • 본질적으로 컨트롤러에서 비즈니스 로직을 추상화
  • 컨트롤러와 함께 비즈 로직을 사용하는 경우 컨트롤러에서만 사용할 수 있습니다.
  • 컨트롤러는 긴 비즈니스 로직을 처리하지 않고 범위에 데이터를 넣는 것입니다
  • 따라서 위의 시나리오에서 발생하는 것은 복잡한 비즈니스 로직이 컨트롤러에 묶여 있다는 것입니다. 데이터 처리 용이 아닙니다. 따라서 서비스 또는 공장에 일부를 배치하십시오. 따라서 코드는 간결하고 모듈 식입니다.
  • 서비스는 싱글 톤입니다

답변

서비스는 대부분 개체의 생성자 클래스를 설명하는 개체입니다. 프레임 워크 내 깊숙한 곳에서 Object.create () 함수가 호출 된 다음 컨트롤러를 사용하여 해당 객체와 메서드를 호출하여 서비스를 사용할 수 있습니다. 반면에 Factory는 기본적으로 개체를 생성하지 않으므로 모든 속성과 메서드를 정의한 후에는 전체 개체 위치를 반환해야합니다.


답변