【问题标题】:What single characteristic is most important for a good routine?对于良好的例行程序来说,最重要的单一特征是什么?
【发布时间】:2010-09-26 17:28:49
【问题描述】:

例程、过程、方法 - 无论您如何称呼它们,它们都是我们开发人员的重要组成部分。您认为哪一个特征是最重要的

(通过为每个答案提供一个特征,可以单独为他们投票。也就是说,这个问题的目的不是决定挑出一个特征,而是突出所有重要的。)

【问题讨论】:

  • 我在这里发现了一个主要问题......你怎么看?
  • -1:我认为质量有几个维度,选择其中一个是没有帮助的。有“满足需求”、“性能”、“可维护性”、“适应性”和“拥有成本”,它们是正交的。提升一个似乎是个坏主意。
  • 你显然是对的!没有一个单一的特征足以构成一个好的例程。这个想法实际上是为了突出所有这些功能。所以你可以为每个人写一个答案。
  • “所以你可以为每个人写一个答案”。这正是我拒绝的,因为它不实用,甚至没有帮助。由于上下文定义了各种属性的相对排名,因此在特定项目/问题域之外没有可能的答案。
  • S.Lott 在我看来,您的思维水平与常规水平不同。将好常规与坏常规区分开来的大多数特征与您在第一条评论中提到的标准正交。例如,一个好名字或单一用途如何影响性能或拥有成本?

标签: function methods procedures routines


【解决方案1】:

我认为最重要的标准是它有一个单一的目的。

在那之后,它正确地满足了那个目的(并且只有那个目的)。

【讨论】:

  • 这是两个标准 ;-) 我会说唯一的目的是最重要的。
  • 是的,我同意。一开始我什至是这样的:-)
【解决方案2】:

自注释过程名称。

示例: GetStoreFromAddress GetCarsByMake

【讨论】:

  • 我同意,但是 CamelCasing 变量名或方法名都很糟糕。
【解决方案3】:

应该很容易进行单元测试。

【讨论】:

    【解决方案4】:

    例程的名称与其功能一一对应。

    令人惊讶的是,函数 X 执行 X 和 Y 的频率,或者 X 的大部分而不是 X 的全部。

    【讨论】:

      【解决方案5】:

      没有一个标准可以区分好与坏的习惯。

      其中标准是:

      • 概念完整性:确实如此 可以用 a 来描述的东西 简单的简短形式,一个句子或 段落;
      • 松耦合:它的行为不是 对代码中发生的事情敏感 围绕它;
      • 合理的大小:长例程是 更难阅读和理解,并且 不太可能有好的 概念完整性;
      • Parnas 的标准:他们“隐藏” 一件事可以改变,所以 需求变化有限 对系统其余部分的影响。

      【讨论】:

      • 那么你可以写四个答案,嗯? ;)
      • 这意味着我同意一个特征可以表征一个好的例程。我没有。
      • 我不这么看。在我看来,一次突出一个特征并不意味着我们相信任何一个特征就足够了。它只是一种我们可以投票给我们认为重要的人的方法。
      • 你这个笨蛋!您违反了每个答案规则的一个特征!
      【解决方案6】:

      设计为易于人类阅读和理解 - 如果没有它,就很难修改它以拥有将在此处列出的所有其他精彩属性

      【讨论】:

        【解决方案7】:

        它尝试做的事情的数量。

        如果这不完全是 1,那么你可能有问题。

        【讨论】:

          【解决方案8】:

          它不应该有意想不到的副作用。

          【讨论】:

            【解决方案9】:

            良好的错误处理(可靠性)

            【讨论】:

              【解决方案10】:

              简洁

              (这应该是一个半有趣的答案,但所以不会让自己发布一个词!)

              【讨论】:

                【解决方案11】:

                它必须是原子的

                【讨论】:

                  【解决方案12】:

                  代码行数。

                  【讨论】:

                    【解决方案13】:

                    您应该跟踪例程投入使用后所需的编辑次数。一个“好”的例程是一个几乎不需要编辑的例程。当需要进行大量修复时,“糟糕”的例程肯定会证明自己如此。

                    这可以通过在每次编辑后更新的每个方法调用上的注释标题轻松完成。

                    【讨论】:

                      【解决方案14】:

                      它只做一件事或将多件事委托给其他功能

                      【讨论】:

                        【解决方案15】:

                        清晰 - 易于理解

                        【讨论】:

                          【解决方案16】:

                          如果您将例程视为 API 的一部分,我认为这更容易回答。没有多少例程是独立的,至少在真正有用的系统中没有。所以老实说,我认为编写例程时要考虑的最重要的事情是:

                          1. 直观性我的指令集有多直观——人们是否能够理解其目的而无需翻阅大量文档?

                          2. 正交性我的例程正交性如何?每个人都完成一项特定的任务,还是有多种(但略有不同)的方式来做同样的事情?如果有,那就不好了,API 可能需要重新设计。

                          3. 紧凑性完成简单任务需要多少 API?我是否需要学习很多东西才能完成某件事,或者我可以只用几个直观而强大的例程就足够了吗?您需要权衡这个与正交性的权衡,以便为您的特定领域取得良好的平衡。

                          【讨论】:

                          • 很好。那为什么不把它分成三个答案呢?
                          • 也许我不应该回答这个问题 b/c 我认为它过于简单化了。我是说很多时候你不能从任何有意义的意义上考虑例程本身。这三个一起考虑模块或 API 中的所有例程。
                          • 感谢您的意见。您提出的观点非常好!
                          • 我不同意。您当然可以分析单个例程并判断它是坏例程还是好的例程。您也可以(并且应该)在 API 级别进行分析,但这只是一个不同的级别。
                          【解决方案17】:

                          从例程名称中,您可以说出例程的作用(当您检查代码时,您会意识到您是对的 ;-)

                          【讨论】:

                            【解决方案18】:

                            例程始终使用一致的抽象级别。

                            【讨论】:

                              【解决方案19】:

                              我想说的是有据可查(并且实际执行)的前置条件和后置条件。

                              【讨论】:

                                【解决方案20】:

                                单个返回点

                                【讨论】:

                                  猜你喜欢
                                  • 1970-01-01
                                  • 2018-10-02
                                  • 2012-08-22
                                  • 2020-12-07
                                  • 1970-01-01
                                  • 2013-09-13
                                  • 2011-04-09
                                  • 2012-02-03
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多