2

Я часами читал о различиях между сервисом и фабрикой как здесь, так и в угловых документах и ​​в других местах, но я до сих пор не понимаю.AngularJS: некоторые помогают понять обслуживание/завод

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

Если мы должны были игнорировать угловой на мгновение и воссоздать это в ванильным JS я правильно в мышлении, как каждая работа:

//factory design 
var factoryDesign = function(){ 

    var privateFoobar = 'foobar', 
     reverse = function(){ 
      return privateFoobar 
       .split('') 
       .reverse() 
       .join(''); 
     } 

    return { 
     foobar: privateFoobar, 
     raboof: reverse() 
    } 

}; 

//Service design 
var serviceDesign = function(){ 
    this.foobar = 'foobar'; 
    this.raboof = this.foobar  
     .split('') 
     .reverse() 
     .join(''); 
} 

var myGlobalServiceInstance = new serviceDesign(), 
    myGlobalFactoryInstance = new factoryDesign(); 

console.log('service', myGlobalServiceInstance.foobar, myGlobalServiceInstance.raboof); 

console.log('factory',myGlobalFactoryInstance.foobar,myGlobalFactoryInstance.raboof); 

JSFIDDLE

Оба из этих случаев будет возвращать То же самое, однако завод полагается главным образом на частные объекты, которые просто возвращаются, а методы и объекты объектов привязаны к экземпляру.

Если это так ... то, что именно является точкой этого? Есть ли основания для дифференциации завода ... Я понимаю, с сервисом это позволит вам изменить значение, такие как:

myGlobalServiceInstance.foobar = 'newFoobar'; 

Но каковы преимущества использования завода? Если возможно, пожалуйста, предоставить какие-либо примеры в ванильном JS

ответ

1

Чтобы быть короткими: С услугой, угловатый доставляет вам экземпляр функции вы передаете Итак:. service('myService', function myService(){}); такие же, как new myService();,

, а с завод, угловой обеспечивает то, что возвращается функцией вы передаете в: factory('myFactory', function myFactory(){}); такого же, как myFactory();

так с заводом, вы можете, например, передать свой собственный класс/конструктор-Functio ndefinition и создать его экземпляр в другом месте в коде , что-то вроде:

+0

Фабрика представляет собой одноэлементный символ, означающий, что функция фабрики получает только один раз по часовой стрелке, а затем вы получаете тот же объект, что и он. Я не знаю, что вы подразумеваете под синтаксисом ванили js - угловой ванильный JS. Но чтобы догнать ваш код, это было бы больше похоже: 'var myGlobalServiceInstance = new serviceDesign(), myGlobalFactoryInstance = factoryDesign();' – Charminbear

+0

Я бы не назвал его «застрявшим», так как он иногда или даже очень полезен. Но да. ;) – Charminbear

Смежные вопросы