问题标签 [factories]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4758 浏览

javascript - 如何将 KendoUI 数据源 OData 参数发送到抽象的 RESTful AngularJS 数据工厂?

前段时间,我在 AngularJS 中建立了一个抽象数据工厂,需要一个关于如何简化其使用的提示。我最初的印象是我会为每个实体创建另一个工厂,该工厂将从 AngularJS 控制器中调用。结果它看起来太复杂了,我想删除中间实体工厂(ContentTypesFactory),并直接从 AngularJS 控制器调用抽象工厂。

在下面的示例中,我正在连接一个 KendoUI 数据源。

AbstractRepository.js:

ContentTypesFactory.js:

ContentTypesController.js:

现在,删除对 ContentTypesFactory 的引用,我的新控制器代码如下所示:

我确信改变并不难,但我对 Angular 还是很陌生。我如何连接它以使用抽象存储库,并寻找任何其他 Angular 最佳实践和命名建议?

0 投票
1 回答
294 浏览

ruby-on-rails - has_many 运行测试时出现 Factory Girl 错误

我一直在努力使用 Factory Girl 建立一个 has_many through 关系。我有两个模型课程和类别,一个课程可以有多个类别,我有两个工厂课程和类别。

我有这三个模型

工厂

单个文件中的类别工厂

测试运行时我得到的错误是:

合作伙伴有一个有效的课程失败/错误工厂:expect(FactoryGirl.create(:course)).to be_valid ActiveRecord::RecordInvalid: Validation failed: Name has been taken

我想要做的是创建一个具有一个或多个类别的课程,我不确定我在这里做错了什么,但我需要课程工厂有效。我知道我的类别工厂是有效的。

似乎它尝试两次创建一个类别,这就是为什么它提出名称错误已经存在。

0 投票
1 回答
627 浏览

domain-driven-design - DDD 和工厂 - 密集的 CRUD 操作

我们最近决定在我的团队中为我们的新项目采用 DDD,因为它有很多明显的好处(来自 Active-Record 模式学校),还有一些事情还不清楚。

假设我有一个实体交易,它依赖于以下实体(每个实体又依赖于其他如此多的实体): 1. 客户 2. 账户 3. 货币

当我使用工厂实例化事务实体以传递给域服务以获取一些花哨的业务规则时,我是否会进行如此多的查询来设置所有这些依赖实例?

如果我的工厂中有跳过此类依赖项的重载,那么在某些情况下这些重载将为空,并且何时可以访问这些属性以及何时不能访问这些属性将变得太复杂而无法区分。使用 Active-Record 模式,我只使用延迟加载并让它们仅按需加载。DDD有什么想法吗?

编辑:

在我的场景中,“事务”似乎是聚合根的最佳候选者。我在我的应用程序服务“InitiateTransaction”中定义了一个方法(也有一个“FinalizeTransaction”,因为它涉及到 PayPal 的重定向),并将携带 AccountId、CurrencyId、LanguageId 和各种其他外键以及 Transaction 所需的 DTO 作为参数属性。

当调用我的域服务(交易处理器和欺诈规则评估器)时,我需要指定加载所有依赖项的“交易”聚合(“Transaction.Customer”、“Transaction.Currency”等)。

因此,如果我是正确的,所需的步骤是: 1. 调用一些存储库来检索客户、货币等。 2. 使用上面指定的依赖项调用 TransactionFactory 以获取事务对象 3. 使用完全加载的事务对象调用域服务以进行业务发生的规则

正确的?此外,我担心的是第 1 步和第 2 步。

如果“客户”、“货币”和其他实体/值对象“交易”依赖,则依次具有其他依赖关系。我是否也尝试设置这些?因为在我看来,如果我这样做了,我的应用程序服务中的代码将非常臃肿,并且不能很好地重用以放置在单独的方法中。但是,如果我不这样做,只是按照您的建议从带有“GetById(id)”的存储库中检索那些,我的代码最终可能会出现错误,因为我需要返回一个“用户”的属性“Transaction.Customer.CreatedByUser”例如,它将为空,因为存储库仅加载平面实例。

编辑:

我最终使用 GetById(id) 仅加载我知道它们在我的服务中需要的依赖项。由于平面加载而意外访问空实例并不是一件很有趣的事情,但我有我的单元测试来保护我免于将其投入生产!

0 投票
2 回答
7628 浏览

ruby-on-rails - FactoryGirl initialize_with 多个参数

我有一个初始化时有多个参数的模型,其中一个用于实例化模型的方法中:

我正在尝试创建一个使用这些参数对其进行初始化的工厂,但是wrong number of arguments在尝试执行此操作时出现错误:

但这给了我wrong number of arguments (0 for 3)。是否无法将多个参数传递给initialize_with

0 投票
2 回答
4428 浏览

javascript - Angularjs cacheFactory:id 已经被占用

我正在使用 $cacheFactory 来存储应用程序的语言 JSON 文件,并且我在每个新路线上运行一个工厂方法,如下所示:

index.js

工厂.js

在第一页加载它工作,然后如果我浏览,而不刷新,验证/登录我得到一个控制台错误:

[$cacheFactory:iid] CacheId 'langCache' 已经被占用了!

似乎(因为我在每条路线上都调用工厂方法)它不能使用相同的 id !?

我实际上不知道该怎么做才能解决此问题,请提供任何帮助,谢谢。

0 投票
1 回答
281 浏览

ruby-on-rails - 未初始化的常量 TestFactories (NameError)

我是 Ruby on Rails 的初学者,正在为 wiki 项目编写“用户登录”规范,但出现以下错误:

这是我的 sign_in_spec.rb

这是我的 test_factories.rb 文件:

这是我的 Gemfile:

0 投票
1 回答
37 浏览

ruby - 未能在工厂中填充列“方法”

我需要为包含名为“方法”的列的数据库表定义一个工厂。

我试过这样的事情:

但是,当我尝试构建它时,我收到一条错误消息:

它似乎将“方法”标识为函数而不是数据库列。我试图通过:methodor来强调这一点"method",但这没有用。

所以,我必须像这样建造这个工厂才能让它工作:

有什么方法可以避免这种黑客攻击并在工厂中正确定义此列?

0 投票
1 回答
107 浏览

javascript - 为什么使用“新”创建 Angular.js 服务?

根据这个问题:

angular.service 与 angular.factory

服务由 angular 使用 new 关键字创建,表示new返回对象的实例。

例如:

但是,对于工厂,它们不是。

这意味着开发人员可以选择创建新实例(通过使用关键字new)——因此,我假设它为什么称为工厂。

我的问题是:

为什么 Angular 开始创建一个新的服务实例?

我同意服务应该是单例的,它们是,但是创建返回函数的新实例有什么意义呢?对于服务来说,如果 Angular 只返回声明的函数不是更好吗——就像他们对工厂所做的那样。

这对服务不是更有意义吗?

我问的原因是因为我在抽象层上创建服务,但我不确定我是否真的应该在工厂 API 上使用服务 API,只是因为创建声明函数的新实例似乎有点毫无意义,而且矫枉过正=\

0 投票
1 回答
278 浏览

angularjs - 角 1.3.9 | 当控制器 2 发生更改时,控制器 1 中的服务未更新

一如既往地提前谢谢你。我是 Angular 的新手,并试图通过一个逐渐变得复杂的教程构建一个 todoapp 来学习。

我现在面临的挑战是试图了解设置全局变量 isLoggedIn 的最佳方法,当用户通过护照登录时该变量将得到更新,并且状态可以在控制器之间共享。

这是我的代码:

  • 您可以看到我将服务注入控制器的位置,并将其设置为范围变量。
  • 当在 userController 上调用登录函数时,用户控制器 $scope 变量会更新为 true ... mainController 变量不会。
  • 当然,可以通过更新 mainController 中的范围变量来解决这个问题……但这会默认使用全局变量。
  • 我还尝试了一个简单的工厂,它返回一个简单的变量和一个不同的方式作为函数。:

  • 我也有点困惑,因为我还两次列出了“TodoFactory”。当我从“TodoFactory”中取出第一个引用时,就在我将它作为函数传递之前,我得到了一个未定义的错误。

任何帮助将不胜感激。

0 投票
1 回答
1002 浏览

ruby-on-rails-4 - 何时编写模拟对象与工厂(FactoryGirl)

我有一个非常大的 Rails 代码库,我们使用了很多工厂(FactoryGirl)。问题是,工厂女孩的一个实例创建了一个数据库事务,所以当我们运行整个测试套件时,它需要很长时间。然而,如果我们正确地使用了 Rspec 模拟,那么测试会以闪电般的速度运行,因为模拟是轻量级的——不需要数据库事务。

我的问题:你什么时候模拟角色、实体或对象,什么时候使用一个有效的对象实例?如果有人可以提供一个例子,那就太好了。