这是服务和工厂之间的区别吗?

时间:2014-03-19 17:45:56

标签: angularjs angular-services

我读到的关于服务/工厂/供应商的最清楚的例子之一是它们对应于:汽车,为您提供汽车的工厂(例如红色汽车,蓝色汽车)以及可输出汽车的可配置工厂(例如高品质的汽车,低质量的汽车)

令我困惑的部分是"一切都是单身"说明。从上面的例子我假设一个"服务"是一个单身人士返回自己,工厂和提供者是返回对象的单身人士(每个人都是独一无二的)。也就是说,如果一个控制器有一辆蓝色轿车,另一个是红色轿车,那么它们将是两辆独立的汽车。

我认为虽然混淆来自工厂以两种不同的方式编写。在某种程度上,您返回一个对象。这使它在功能上等同于"服务"。在另一种方式中,您返回一个可实例化对象的函数,以便使用此工厂的任何东西都可以获得新的单独实例。

这是对的吗?在写工厂的两种方法中,其中任何一种都是反模式的吗?

2 个答案:

答案 0 :(得分:1)

我专门写的一篇博客回答了这个问题:

所以在这里。我将总结然后跟进一些例子:

  • 如果要传递构造函数,请使用服务。该 将使用“new”运算符和结果调用函数 存储。
  • 如果要从a返回对象,请使用工厂 功能(即工厂模式)。该函数将被调用和 结果存储。
  • 如果您希望能够提供,请使用提供商 在使对象可用之前,对其进行模块范围的配置。

为什么有多种方式?主要是因为像TypeScript和CoffeeScript这样的一些系统会生成代码,这些代码决定了一种方法而不是另一种方法,所以它具有灵活性。

要查看包含示例的完整帖子:http://csharperimage.jeremylikness.com/2014/01/understanding-providers-services-and.html

答案 1 :(得分:0)

我所看到的关系是工厂相当于Javascript中的揭示模块设计模式。

模块设计模式 - Singelton:

var x = (function() {
    var y = 1,

    zMethod = function() {
       return y + y;
    }

    return {
       y: y,
       z: zMethod 
    }

}());

Angular Factory:

angular.module('app', [])
    .factory('x', function() {
        var y = 1,
        zMethod = function() { return y + y; }

        return {
            y: y,
            z: zMethod
        }
    });

帮助澄清幕后发生的事情......但这只是三个部分之一!