Исходя из фона Java
, мне очень нравится концепция угловых заводов; мы до некоторой степени имитируем POJO. Я могу придать содержательные методы и выполнить логику, которая является самодостаточной в самой модели. В то время как для служб я склонен рассматривать их так, как я бы рассматривал сервис на стороне сервера, просто для получения данных.
Например, если бы мы создали какой-то твитер Twitter, для потока твитов у меня был бы TweetSteamFactory
, который внутренне извлекает данные с помощью TweetService
, чтобы получить последние твиты. Может быть, у моей фабрики есть метод getNextPage()
, который привязан к ngClick
где-то - когда он запущен, он, конечно, делает свой звонок с TweetService
.
Во всяком случае, я вижу довольно четкое различие между службами и фабриками, хотя мое понимание может быть ошибочным.
http://plnkr.co/edit/SqPf212nE5GrSPcZdo5K
Контроллер
app.controller('MyController', function(FoobarFactory) {
FoobarFactory()
done(function(factory) {
var factory = factory;
$scope.data = factory.getData();
$scope.baz = factory.getBaz();
})
});
завод
app.factory('FoobarFactory', ['MyService', function(MyService) {
function Foobar() {}; // Empty constructor
angular.extend(Foobar.prototype, {
_init: function() {
var deferred = $.Deferred();
var foobar = this;
this.baz = true;
this.data = undefined;
MyService.getData()
.done(function(data) {
foobar.data = data;
deferred.resolve(foobar);
})
deferred.resolve();
return deferred.promise();
},
getBaz: function() {
return this.baz;
},
getData: function() {
return this.data;
}
});
return function() {
var deferred = $.Deferred();
var foobar = new Foobar();
foobar._init()
.done(function() {
deferred.resolve(foobar);
})
.fail(function(error) {
deferred.reject(error);
});
return deferred.promise();
};
}]);
Спасибо. Я читал о службах и фабриках. Если вы посмотрите на исходный код при вызове service(), он фактически вызовет factory(). Я просто не понимал, что делать вещи более запутанной фабрикой - тоже услуга. Facepalm. –
Завод не является сервисом. Factory - это «рецепт» для создания _creating_. Аналогичным образом, рецепт службы - это еще один способ создания службы. –
Другими словами, их концептуальный обзор сосет. –