【问题标题】:Is AngularJS's factory the same as a factory pattern?AngularJS 的工厂和工厂模式一样吗?
【发布时间】:2016-07-12 02:51:21
【问题描述】:

昨天听同事说angular中的工厂和工厂模式不一样。我很好奇这是否是一个有效的陈述以及为什么。

通常工厂会为您创建一个对象的实例。从我们的代码来看,工厂看起来像是一个包装器或对象,也可以为相关的 Web 服务调用,例如 GET、PUT、POST、PATCH、DELETE。在某些情况下,情况会有所不同,但在大多数情况下,它看起来像是有助于与相关 Web 服务交互的东西。

拥有一个仅基于“GET”返回对象的工厂似乎更符合传统的工厂模式,但我们处理其他动词的事实让我认为这是偏离模式的地方。

有人可以确认这是否是使用角度工厂的标准方法,如果是,我的直觉/想法是否正确,或者我是否遗漏了什么?

更新

请求提供关于我在说什么的代码。我在谷歌上搜索了一些角度工厂的例子,看看其他人是否在做与我在工作中看到的类似的事情。我找到了以下示例:http://weblogs.asp.net/dwahlin/using-an-angularjs-factory-to-interact-with-a-restful-service

当您查看示例时,您会注意到“dataFactory”不仅有一个 GET,它还有其他 HTTP 动词。这是用户群的不良做法,还是使用它的标准方式以及工厂与设计模式不同?

【问题讨论】:

  • 你真的应该用代码来澄清你所说的 AngularJS 工厂是什么意思。
  • 喜欢引用module().factory?很确定这是一个常见的概念
  • 是的,但它与 HTTP、GET、PUT 等完全无关。所以很难理解你在问什么。工厂只是一个功能,其职责是创建一个服务实例。仅此而已。
  • @JBNizet,这是我的理解,相信你已经确认了。在我看来,他们使用的东西不正确。

标签: angularjs design-patterns


【解决方案1】:

Factory 是 Angular 中 Provider 的一种配方,也是 Factory 模式的一种形式,它只是一个对象负责创建其他对象的过程。

您提到的示例也是工厂模式的实现,虽然并不理想,但 dataFactory 创建并返回一个代理类型对象,该对象将在另一个消费类中用于执行 CRUD 操作。不要将它与与工厂模式无关的 HTTP 动词混淆。换句话说,工厂类可以返回一个可以包含任何操作的对象。

实现工厂类的理想方式:

function Bird(type) {
    this.type = type; 
    //constructor logic
    this.fly= function () {
        //other business logic
    };
}
//Below class is a factory which creates object for requested Bird type
function BirdFactory() {     
    this.create = function(type) {
        return new Bird(type);
    };
}

希望这可以澄清。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2023-03-23
    • 2017-07-31
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多