问题标签 [parameter-object]

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 投票
4 回答
666 浏览

c# - 为参数对象创建常规类还是内部类?

我没有将许多参数传递给一个方法,而是将它封装到一个参数对象中。

注意:简化为演示
替代文字

对于这种情况,更好的做法是什么?

• 创建一个类并将其命名InventorySaveArgs
- 或 -
• 创建一个嵌套类并将其命名SaveArgs

你能解释一下为什么会选择其中一个吗?

[编辑]:该参数类型也将在另一个程序集中使用。

附带问题:只是好奇,如果有一个模式名称用于将多个参数封装到一个对象中。

[更新]:在 MSDN 上找到的嵌套类型使用指南
InventorySaveArgs应该可以从另一个程序集中获得,所以我要上一个普通的课程。

0 投票
2 回答
2187 浏览

java - 帮助重构:引入参数对象?

我有一些相同的代码,只是某些分配序列的顺序略有不同。

很容易将其分解为 type 的方法参数int[],它表示顺序。

但是,我发现这不是最清楚的。

另一种选择是将它们分解为 type 的对象AssignmentOrders。我还可以对对象构造函数中的值进行验证,而我无法对数组进行验证。这将是 Refactoring 书中的“引入参数对象”重构

我想知道这种特殊的重构是否过度,我应该坚持使用int[]?

代码:

原件的三个样本:

我如何将上述 3 重构为:

我如何在理论上将其重构为参数对象:

我想做的是创建一个特定的类而不是使用int[]......但想知道这是否会有点矫枉过正。

好处是它更具可读性。而不是orderOfSections[0],它可能是orderOfSections.value1SectionIdx......我还可以将一些验证代码放入类中。

我相信这就是 Martin Fowler 所说的引入参数对象。

编辑:

另一种选择是使用字典。比新课程更轻,但更具描述性......然后我可以使用类似的东西orderOfSections["value1"]

0 投票
3 回答
646 浏览

python - 如何在 Python 中实现“参数对象”重构?

现在我使用参数对象的类来继承

这消除了使用代码而不是类代码本身的荒谬性。所以,我想做 C++ 的事情并将参数对象传递给初始化列表,就像这样

我可以在 Python 中做到这一点吗?具体来说,我可以通过以某种方式将其称为子类来设置父类的属性__init__吗?- 从阅读“潜入 Python”中,我想我可以做到这一点,因为对象在__init__被调用时已经构建好了。

或者,也许有一些不同的方法可以在 Python 中实现参数对象重构(我只是想强制使用 C++ 技术)?

0 投票
2 回答
999 浏览

.net - 如何在几秒钟内用 ReSharper 创建一个方法参数对象?

是否可以选择方法的所有参数并要求 ReSharper 从这些参数创建一个类作为“方法参数对象”?

0 投票
3 回答
371 浏览

c# - 有没有用于编写这样的代码的反模式名称?

下面是一些使用参数类来包含Show()方法的可能参数的代码。这个FooOption类中的值不是很相关。您可以通过查看Show()下面的实现来看到这一点。我知道这是不好的代码,但是是否有任何与此相关的反模式?

更新:我知道参数对象不是反模式。根据我的经验,参数对象属性是相关的。这是我试图找到的可能的反模式。设置所有三个属性没有意义。

0 投票
2 回答
346 浏览

javascript - javascript函数参数对象验证

我想让我的所有函数都接受一个对象参数,这样我就可以向它传递一个独立于顺序的命名参数列表。

例如:

所以我可以通过传入任何东西来创建一个 A 对象,如果该对象没有第一个或第二个属性,那么该对象仍然会在其所有属性设置为 null 或其他一些默认值的情况下生成。

如果我想创建一个默认的 A 对象,我只想在没有任何参数对象的情况下调用 new A() ,但这会引发错误,因为我试图非法访问“未定义”的属性,所以构造函数不会不做任何事情。

我可以这样:

但是如果我想让我的所有函数都使用一个参数对象,我需要在每个函数定义中包含这一行。

是否有更好的方法来实现此结果,或者是否可以操作函数原型,以便所有函数自动进行此检查以确保参数存在或至少已初始化,以便代码在尝试访问时不会崩溃“未定义”的属性。

谢谢。

0 投票
2 回答
246 浏览

c# - 方法参数与参数对象

我正在尝试构建一个框架,允许人们通过实现接口来扩展我们的核心功能。下面是这个接口的一个简化示例。

最近,我们决定修改这个接口(我知道我不应该破坏依赖代码,但事实是我们还没有任何第三方实现这个接口,所以我们有机会“重做”正确实现此接口)。

我们需要在这个界面中再添加 2 个参数,我们的软件才能正常工作。我们正在考虑的两种方法是将它们添加到签名中,如下所示:

或通过创建这样的参数对象

并将它们添加到方法的末尾,如下所示:

我正在寻找某种指导,说明哪种方式是“最”正确的继续方式。我可以看到这两个类别的优缺点,但我不希望我的偏见导致我走错路。

我的一些主要担忧是:

  • 软件的可扩展性——我希望用户能够通过实现接口来做我还没有想到的事情
  • 可维护性 - 理想情况下,我不想再接触负责再次调用 GetData() 的代码
  • 清洁 API - 我不希望我得到的解决方案让第 3 方开发人员畏缩

我什至不知道在网上问什么问题来获得这个问题的指导。我有一种感觉,答案是“取决于”(取决于 p1-p5 与 GetData() 函数的目的之间的相关性),但有人可以指出我应该问的问题列表以帮助我评估一种解决方案是否比另一种更好?

相关: 帖子 1 帖子 2

0 投票
1 回答
659 浏览

java - 如何在参数对象类中使用 @CookieValue?

是否可以将@CookieValue 放在参数对象中?我似乎无法让这个工作缺少什么?

这是参数对象类。

0 投票
1 回答
513 浏览

java - 在 IntelliJ 13 中引入参数对象重构

我想在 IntelliJ IDEA 13.1 中执行自动“引入参数对象”重构。根据这个页面,这种重构似乎在 10.5 版本中可用,但我似乎在当前版本中找不到它。

简而言之,我希望 IntelliJ 创建一个封装方法的一系列参数的类,并将参数替换为该类型的实例。

这种重构真的不再可用了吗?

0 投票
1 回答
322 浏览

c# - 使用 POCO 作为 EntityFramework 存储过程的参数对象

我想使用一个类示例:

作为要传递给存储过程的参数对象。

这将是我的电话示例

存储过程中的参数名称将匹配“ClassA”的属性。

如果我删除参数对象(ClassA),调用工作正常并返回正确的结果。我宁愿不使用 Entityframework 设计器或向我的实体添加任何 DB 属性,因为它们是可重用的组件。此外,如果此参数对象可用于保存输出参数,那也很好。我还没有找到任何使用 POCO 作为参数对象的好文档。

这是 EntityFramework6 MVC5