AngularJS : 공장이란?


101

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

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

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

공장

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

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

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

최신 정보

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

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

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

- -


6
나는 이것이 그 질문의 중복이라고 말하지 않고, Factories(위에 인용 된) 에 대한 대답 이 약간 혼란 스러웠 기 때문에 질문하기 전에 그 질문을 읽었습니다 . 아래 답변 중 일부는 Factories내가 이해할 수있는 것으로 축소 됩니다.
Code Whisperer

1
이 질문은 "중복 된"질문보다 더 많은 찬성표를 가지고 있습니다. 아마도 다른 방법으로해야할까요?
Code Whisperer 2015 년

3
링크 는 잘 설명합니다.
Ahmed

답변:


70

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

이 질문을 확인하십시오 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()];
}​

그래서 그것들을 보는 한 가지 방법은 그들이가는 복잡성의 순서 Provider > Factory > Service > Value일까요?
Code Whisperer 2013 년

2
그것은 그것을 보는 한 가지 방법이고 다른 하나는 Factory and Service를 Provider의 추상화로 생각하는 것입니다. 내가 틀렸다면 누군가 나를 정정하지만 공장 및 서비스는 내부적으로 공급자를 사용합니다. 이것이 제공하는 것이 "금속에 가장 가까운"버전 인 이유입니다. Value는 응용 프로그램 전체에서 사용할 수있는 상수를 정의하는 방법이라고 생각합니다.
Jonathan Palumbo 2013 년

18

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

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

    //Write custom code here

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

1
서비스 생성자 함수에서 사용자 지정 코드를 실행할 수도 있습니다. 아무도, 다른 코드를 실행할 수 없습니다 생성자 함수 내부에 말했다
nonopolarity

9

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

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

0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.