Я часами читал о различиях между сервисом и фабрикой как здесь, так и в угловых документах и в других местах, но я до сих пор не понимаю.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);
Оба из этих случаев будет возвращать То же самое, однако завод полагается главным образом на частные объекты, которые просто возвращаются, а методы и объекты объектов привязаны к экземпляру.
Если это так ... то, что именно является точкой этого? Есть ли основания для дифференциации завода ... Я понимаю, с сервисом это позволит вам изменить значение, такие как:
myGlobalServiceInstance.foobar = 'newFoobar';
Но каковы преимущества использования завода? Если возможно, пожалуйста, предоставить какие-либо примеры в ванильном JS
Фабрика представляет собой одноэлементный символ, означающий, что функция фабрики получает только один раз по часовой стрелке, а затем вы получаете тот же объект, что и он. Я не знаю, что вы подразумеваете под синтаксисом ванили js - угловой ванильный JS. Но чтобы догнать ваш код, это было бы больше похоже: 'var myGlobalServiceInstance = new serviceDesign(), myGlobalFactoryInstance = factoryDesign();' – Charminbear
Я бы не назвал его «застрявшим», так как он иногда или даже очень полезен. Но да. ;) – Charminbear