【问题标题】:How should I name a java.util.Map? [closed]我应该如何命名 java.util.Map? [关闭]
【发布时间】:2011-01-16 05:50:18
【问题描述】:

我有一个java.util.Map,它从一个逻辑名称映射到一组与该名称一起使用的参数。

Map<String,Parameters> howShouldINameThee = ...;

这张地图的最佳名称是什么?

我应该简单点,直接叫它parameters 还是parametersMap

我是否在名称中包含有关密钥的信息,例如paramtersByName,以便更明显地使用String 密钥?

【问题讨论】:

    标签: java map naming-conventions


    【解决方案1】:

    我倾向于使用parametersByName 之类的东西,以免混淆Map 的内容。你永远不知道什么时候你必须重新审视你很久没有看过的代码。

    在 Java 中,我发现没有必要包含数据结构的名称(如 parametersByNameMap),因为类型是明确的。

    【讨论】:

    • 您的最后一句话对于 Maps 是正确的,但不一定适用于 Lists、Sets 等。
    • 通常认为用数据类型污染名称是一种不好的做法。它是多余的,不能很好地与重构配合使用,并且通过延长名称会损害可读性。
    【解决方案2】:

    地图将某事物映射到其他事物。
    我喜欢使用像uidToPerson 这样的名字。 “到”是我能想到的最短的明确方式来表明我有一张地图。

    编辑:
    我要补充一点,我更喜欢以这种方式命名地图,因为“键”和“值”在名称中以该顺序出现。与valueByKey 不同。在映射操作中,键是第一位的。你put(key, value)get(key) 给出了一个值。

    当然这是个人喜好问题。

    【讨论】:

    • 我使用这个约定,但我不确定如何映射 Map of Maps...
    • @CarlPritchett 对我来说很不寻常,但是 fooToBarToBaz 呢?或者 bazByBarByFoo...
    • @PaoloFulgoni 那是 fooToBar -> Baz 还是 foo -> BarToBaz?还是模棱两可……
    • @CarlPritchett 如果您经常使用哈希图作为键,那么,是的,这将是一个问题。在 20 年的编码中,我从未这样做过,也从未见过这样做过。如果发生这种情况,我将不得不使用不同的约定。
    • @z5h 真的!但我更多的是在想它是多么容易阅读。我同意一个新名字会更好。
    【解决方案3】:

    在我的应用程序中会有很多类型的参数。

    例如,在GAE中,当我需要将http请求参数提取成可序列化的形式时,我将映射命名为httpRequestParameters或httpReqParams。例如 sessionAttrs。

    对于 GWT RPC,客户端到服务器的参数散列,我将其命名为 client2ServerParams 或 clnt2SrvrParms,并将对应的命名为 server2clientParams 或 srvr2ClntParms。

    在 openid 消费者中,我将地图命名为 consumerAuthRequests 或 redirectFormParameters 及其对应的 providerResponses。

    在重新格式化的输入主要参数映射中,我将其称为 inputArgs。

    在我的情况下,httpRequestParametersBy name、client2ServerParamsByName、consumerAuthRequestsByName、inputArgsByName 或 inputArgValueByKey 等将是多余的并且太长,因为我总是知道地图的键是一个“名称”。我只是确保名称是复数,让我知道它是一个集合。

    这种做法的例外情况是,当键不是名称而是对象时,我会将地图命名为 vehicleByDriver、projByMgr、toxicFoodListByAnimal。

    【讨论】:

      【解决方案4】:

      实际上你自己回答了这个问题。

      这张地图的最佳名称是什么?

      你想将你的地图映射到一个名字,所以你说'地图的名字'!

      在我看来,这应该是命名约定:valueForKey

      加上其他建议keyToValue和valueByKey,我觉得你需要在最后添加单词Map,像这样:keyToValueMap,valueByKeyMap。当您使用 For 时,从语言中可以明显看出它是一种映射。

      【讨论】:

      • IMO,将值放在首位(无论是在 valueForKey 还是 valueByKey 中)会使您检索的类型更加明显。由于 valueForKey.get(key) 给出了值,这是我扫描时首先阅读的内容。
      猜你喜欢
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多