【问题标题】:Naming conventions: "State" versus "Status" [closed]命名约定:“状态”与“状态”[关闭]
【发布时间】:2010-11-12 20:46:09
【问题描述】:

快速提问:我想听听您对在命名“Foo.currentState”与“Foo.status”等字段和“enum FooState”等类型时何时使用“State”与“Status”的想法与“枚举 FooStatus”。那里有讨论公约吗?我们应该只使用一个吗?如果是,是哪一个,如果不是,我们应该如何选择?

【问题讨论】:

  • 嘿。前几天在工作中,我遇到了一个结构,它有一个名为“state”的成员和另一个名为“status”的成员,它们是不同的东西。我开始思考这些词的含义,以及是否要更改它,但是代码又旧又脏又有效,所以我让那条睡狗躺着。哦..这可能应该是一个“评论”,而不是一个“答案,嗯?评论,答案,状态,状态......随便什么。
  • 当然这是关闭的。很好。
  • @jsn 不仅关闭了(现在还没有什么?),而且它仍然是我在这里贡献的最受欢迎的东西 :)
  • 这是一个合法的编程问题。 martinfowler.com/bliki/TwoHardThings.html
  • Status 是一个简单的标签,如“健康”、“降级”、“不可用”等。状态包括所有血淋淋的细节;例如,CPU 利用率和负载平均值、内存利用率、JVM 指标、磁盘使用率等。

标签: naming-conventions nomenclature


【解决方案1】:

国际海事组织:

状态 == 你好吗? [好/坏]

state == 你在做什么? [休息/工作]

【讨论】:

  • 2009 年你在哪里?这个答案在技术术语(cpu 状态、线程状态、状态机;返回状态、raid 卷状态等)甚至大部分其他内容(应用程序状态、帐户状态等)中都是最有意义的。我能想到的唯一不一致的是“事态”或“事物的状态”之类的东西,它更像是你的“状态”(对正在发生的事情的好/坏想法,而不是正在发生的事情)自己去吧)。
  • State 还暗示它不仅包含“休息/工作”的更多信息,还包含有关它正在做的工作(或休息)的所有详细信息。
  • “我正在我兄弟的后院建造一座树屋”将是 state 的更详细示例,正如您所建议的,@BrainSlugs83。在这个例子中,我的状态可能是疲倦/汗流浃背/精力充沛/快乐。
  • 我喜欢这个例子。干净简洁。对于我的实际使用,我可以将其概括为一个公理,即State 应该反映状态机(或工作流)状态节点图中的“指示节点”,其中描述可能很容易成为口头形容词(通常以“-ing”结尾),而Status 是对象的一个​​简单属性,一个简单的形容词,可能被触发器使用或作为决定更改(或保持)状态的观察值。我可能想多了。我这样做..
  • 我同意:STATUS 是状态变化的结果或进展。
【解决方案2】:

这取决于上下文

状态通常是指一个实体的整个状态——它在特定时间点(通常是当前)的所有值和关系

状态更多的是一个时间点,例如,某个过程或工作流中的某个位置 - 是否脏(因此需要保存)、是否完整、是否正在等待输入等

希望对您的决定有所帮助。

【讨论】:

  • 那是我潜在的、未制定的想法! ;)
【解决方案3】:

通常我将使用状态来表示对象或整个系统的当前状态。我使用状态来表示某些操作的结果。例如,对象的状态可能是已保存/未保存、有效/无效。方法的状态(结果)是成功/不成功/错误。我认为这与将状态定义为“state or condition with respect to circumstances”非常吻合,这种情况下的情况是应用了动作/方法。

【讨论】:

    【解决方案4】:

    另一个(完全务实的)更喜欢状态而不是状态的原因是复数很简单:

    • 状态 -> 状态
    • 状态 -> 状态

    相信我,你迟早会在你的代码中拥有一个列表或数组或任何状态,并且必须为变量命名。

    【讨论】:

    • 只是想知道,stati 的复数不应该是 stati 吗?
    • 维基词典说状态:en.wiktionary.org/wiki/status#Noun。不过,其他语言有不同的复数形式。
    • 拉丁复数是“statūs”,加长u,不是stati。
    【解决方案5】:

    我认为很多人使用“状态”来表示一个对象的状态,如果没有其他原因只是“状态”指的是美国的政治分裂。

    【讨论】:

    • 这不是我曾经使用过的原因,也不是我曾经与之共事或阅读过文本的任何人......
    • 那又怎样?这是一个正当的理由。这是一个命名约定。
    • 是的。在澳大利亚,我们也使用“州”一词来描述 1901 年在英联邦中统一的前各个殖民地。因此,我倾向于只使用 .status,因为 .state 通常用于具有地址的数据结构中。
    • 所以 address.state = Tasmania;有道理,但 device.state 不应该涉及地理。
    【解决方案6】:

    我认为您可以在等式中添加另一个视角,即“发送者-请求者”。

    从发件人的角度来看,我会与任何愿意倾听的人交流我的状态。从请求者的角度来看,我会询问某人的状态。

    以上也可以从不确定的角度来解释:

    • 定义 = 状态
    • 未定义 = 状态

    你的状态是什么?我处于放松状态。

    我很确定这只是一种解释,可能不适用于您的特定情况。

    【讨论】:

      【解决方案7】:

      快速查字典会发现 status 是 state 的同义词,但对 相对于其他位置的位置有额外的解释

      所以我会使用 state 来表示一组没有任何相对于彼此的隐式顺序或位置的状态,而 status 则用于那些有(也许离线待机?)。但这是一个很好的区别。

      【讨论】:

        【解决方案8】:

        我处理的许多实体(帐户、客户)可能有一个状态(TX、VA 等)和一个状态(活动、关闭等)

        因此,关于该术语具有误导性的观点是可能的。我们有一个标准化的数据库命名约定(不是我个人的选择),其中状态命名为 ST_CD,状态命名为 ACCT_STAT_CD

        对于 OO 环境中的枚举,这个问题并不那么重要,因为如果你有严格的类型安全,编译器将确保没有人尝试这样做:

        theCustomer.State = Customer.Status.Active;
        

        如果你在动态环境中,我会更担心!

        如果您正在处理的领域是状态机或其他状态信息并且该术语占主导地位,那么我认为 State 非常好。

        【讨论】:

        • 地址属于客户的地址,而不是客户本身,例如,theCustomer.MailingAddress.State = Iowa;
        • @spemble 可能,也可能不会。当附加到没有地址的人时,它也可以是出生状态或居住状态,当然也可以附加到许多其他实体,如地址、执照、许可证等。无论如何,我不确定它与使用常见问题域术语(如状态)来表示状态机/标志/状态的特定实现是否存在歧义的问题有关。然后状态或状态是否具有不同的含义。
        • 面向对象与静态、动态或严格类型无关。它们是完全正交的概念。
        【解决方案9】:

        不久前,我们就我当前的项目进行了确切的辩论。我真的没有偏好,但一致性是一个重要的考虑因素。

        在我的 Sharp PW-E550(我可能会添加一本很棒的字典)中,“状态”的第一个(有几个)定义是“某人或某物在特定时间所处的特定条件”。 “地位”的第一个定义是“某人或某物的相对社会、专业或其他地位”。在这种情况下,即使是“状态”的第二个(也是最后一个)定义也不如“国家”:“特定时间的事务位置,尤其是在政治或商业环境中。”

        因此,如果我们想让使用我的词典(它使用新牛津美国词典,2001 年)的人尽可能简单,“州”将是最佳选择。

        此外,Gang of Four 的书中描述了一种设计模式,称为状态模式,在计算词典中确立了该术语。

        出于这些原因,我建议使用“状态”。

        附:你是DDM吗?你还在为“状态”和“状态”而苦恼吗?!!!!!!!!! LMAO!

        【讨论】:

          【解决方案10】:

          根本不是一回事。停止和启动是状态。停止和启动是状态。

          如果您将它们设为相同的东西,您如何将车辆描述为已停止但当前正在启动。还是当前已提交但尚未进入审批流程的申请,或正在审批但当前处于等待签名错误状态的申请?

          【讨论】:

          • OP 询问是否使用其中一个;不是都。有人可能会争辩说Starting 确实是一个与Stopped 完全不同的State这取决于您系统的语义。例如,检查 Windows 服务。
          【解决方案11】:

          嗯,它们的意思是一样的。我认为没有必要宣传一个人对另一个人的极大偏好,但我通常会选择“身份”,因为我喜欢听起来很拉丁化和古典主义的东西。我的意思是,在我的世界里,schema 的复数形式是 schemata,所以对我来说几乎没有其他办法。

          【讨论】:

          • 它们的意思不同。
          • 这个问题的上下文是软件,这就是这个问题有效的原因。计算机系统几乎总是必须确定和报告系统各个部分的状态/状态,并且描述性地命名事物对于调试或改进软件的人来说变得非常重要。
          【解决方案12】:

          Sophistifunk,我相信你会得到关于状态和状态的论据。要做的最重要的事情是你选择一个,并且只使用一个。我建议与您的团队讨论这个问题,看看每个人都同意什么。

          也就是说,我的建议如下。

          假设您使用的是面向对象的编程语言,则对象的“状态”由对象本身表示。 SomeObject.state 会误导 imo。我不确定您的示例中的“状态”代表什么,但我的直觉是更喜欢这种状态。

          【讨论】:

          • 选择一个并只坚持一个是荒谬的。两者有不同的含义和含义。例如,考虑“GameState”与“GameStatus”——两者具有非常不同的含义并且不可互换。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-09-13
          • 2021-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多