【问题标题】:Propose how to name a "get/create & get" function [closed]建议如何命名“获取/创建和获取”函数 [关闭]
【发布时间】:2013-04-24 19:59:47
【问题描述】:

我正在研究一个按值(例如按名称)从容器(例如数组)返回对象的函数。如果对象不存在,则创建并返回对象的默认副本(默认构造函数)。

这样,这个函数总是返回一个对象,不管该对象在调用函数之前是否存在。

现在我的问题是:如何命名这个函数? GetOrCreateThenGet 听起来很愚蠢。有什么想法吗?

编辑:我觉得这样的东西更接近函数的本质:GetForSure...

【问题讨论】:

  • 我会放弃“ThenGet”
  • ...也可以表示“GetOrCreate(ButDon'tGet)”...
  • 不,这是此场景的典型命名约定,但并不完美。该方法返回一个对象;创建实例但返回 null 会很奇怪。
  • 如果您想保住工作或在未来找到更好的工作,请忽略 Jay

标签: naming


【解决方案1】:

最适合该功能的名称是“提供”,例如,如果您提供商品,您可以从仓库发货或制造/购买新商品然后交付。

【讨论】:

    【解决方案2】:

    为什么你需要getXXX()以外的任何东西。任何具有and/or 的方法都意味着它正在做很多事情并且正在混合关注点并严重破坏Single Responsibility Principle

    如果调用者只需要从合约中获取对象,那么调用者是否应该真正关心对象是否是按需创建的?

    getOrCreate 表示您将get 对象or 它将是created 但不会返回。

    我为什么还要关心create 部分?

    如果我真的应该关心的话,getOrCreateAndGet 在语义上是正确的,但非常不正统,并且容易与同行讨论处理许多事情的方法,混合关注点并打破Single Responsiblity Principle?仅仅因为其他人将事情命名为古怪和无意义的事情也不是做错事的好借口。

    【讨论】:

    • Get 与 GetOrCreate 不同,因为 Get 可能处于所需项目不存在的状态。我建议 Getsert 与 Upsert 类比。
    • 也可能有一个get() 方法,如果可能,它会获取,但如果没有,则失败,不会创建任何东西。两者都有 API。
    【解决方案3】:

    GetGuaranteed 似乎涵盖了调用者需要知道的所有内容...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多