问题标签 [code-maintainability]

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 投票
2 回答
54760 浏览

quotes - 谁写了这个程序语句?“始终编写代码,就好像最终维护您的代码的人将是一个知道您住在哪里的暴力精神病患者。”

始终编​​写代码,就好像最终维护您的代码的人将是一个知道您住在哪里的暴力精神病患者。

我在某人的博客上找到了这个,它介绍为 Rick Osborne 的。但是我用谷歌搜索了这个,其他人说:Martin Golding's,John Woods' 和 Damian Conway's... 是的,Damian Conway 在“ Perl Best Practices ”(2005)中使用了这句话,但 Damian 没有提到是谁写的。

有谁知道这句格言的真正作者是谁?

0 投票
3 回答
729 浏览

c - 除了日志和错误代码之外,用于提高代码可调试性的输入

除了错误代码、错误字符串和日志之外,是否还有其他功能可以合并到代码中,以增加在代码运行时获取调试/跟踪信息,从而帮助在运行时调试问题(或让我们知道发生了什么)?

0 投票
8 回答
10324 浏览

unit-testing - 在进行单元测试时,100% 的代码覆盖率真的是一件好事吗?

我一直都知道用单元测试做最大的代码覆盖率是好的。我还听到微软等大公司的开发人员说,他们编写的测试代码行数比可执行代码本身还要多。

现在,真的很棒吗?有时这似乎不是完全浪费时间,只会使维护变得更加困难吗?

例如,假设我有一个DisplayBooks()从数据库中填充书籍列表的方法。产品需求告诉我们,如果店里有一百多本书,只能展示一百本。

因此,使用 TDD,

  1. 我将从进行单元测试开始BooksLimit(),它将在数据库中保存 200 本书,调用DisplayBooks(),然后执行Assert.AreEqual(100, DisplayedBooks.Count).
  2. 然后我会测试它是否失败,
  3. 然后我将DisplayBooks()通过将结果的限制设置为 100 来进行更改,并且
  4. 最后我将重新运行测试,看看它是否成功。

BooksLimit()嗯,直接进入第三步,不做单元测试是不是容易多了?当需求从 100 本书限制到 200 本书限制时,只更改一个字符,而不是更改测试,运行测试以检查它是否失败,更改代码并再次运行测试以检查它是否成功,这不是更敏捷吗?

注意:假设代码已完整记录。否则,有些人可能会说,他们是对的,进行完整的单元测试将有助于理解缺乏文档的代码。事实上,进行BooksLimit()单元测试会非常清楚地表明有一个最大数量的书籍可以显示,并且这个最大数量是 100。进入非单元测试代码会更加困难,因为这样的限制可能是虽然实施了for (int bookIndex = 0; bookIndex < 100; ...foreach ... if (count >= 100) break;

0 投票
4 回答
150 浏览

sql-server - 增加访问 SQL Server 的次数会损失多少性能?

我有一个 Web 应用程序,其中 Web 服务器和 SQL Server 2008 数据库位于同一服务器场中的不同盒子上。

如果我采用一个整体存储过程并将其分解为几个较小的存储过程,从而使客户端代码负责调用多个存储过程而不仅仅是一个,我会注意到我的 Web 应用程序的性能会受到显着影响吗?


附加背景信息:

我有一个包含数百行代码的存储过程,其中包含决策逻辑、更新语句,最后是一个将一组数据返回给客户端的选择语句。

我需要在调用组件 DLL 的客户端代码(从这个意义上说,客户端代码是调用数据库服务器的 ASP Web 服务器)中插入一个功能。但是,存储过程正在更新记录集并在同一个调用中返回更新的数据,理想情况下,我的代码需要在调用决策逻辑和更新语句之后,但数据返回到客户端之前调用。

为了让这个功能发挥作用,我可能不得不将现有的存储过程分成至少两部分:一个更新数据库的存储过程,另一个从数据库中检索数据。然后我会在这些存储的过程调用之间插入我的新代码。

当我看到这个问题时,我不禁想到,从代码维护的角度来看,最好将我所有的更新和选择语句隔离到瘦存储过程中,并将业务逻辑留给客户端代码。这样,每当我需要在我的客户端代码中插入功能或决策逻辑时,我需要做的就是更改客户端代码,而不是修改一个巨大的存储过程。

尽管从代码维护的角度来看,使用精简存储过程可能会更好,但是通过增加访问数据库的次数,我会遇到多大的性能问题?数据的最终结果是相同的,但我更频繁地接触数据库。当扩展应用程序以满足需求时,这种方法如何影响性能?

我不是一个将性能优化置于一切之上的人,尤其是当它影响代码维护时,但我不想在 Web 应用程序必须扩展时让自己陷入困境并造成头痛。

0 投票
1 回答
109 浏览

iphone - 在 Objective-C 中组织头文件的正常方式是什么?

我确实开始.h以最好的意图组织我的文件,但不知何故,它们变得令人作呕的混乱。

下面是一个例子(这不是那么糟糕,但我见过更糟糕的!)。我尝试过将部分分组,#pragma mark但看起来更混乱。

所有的 UILabel 和 UIButton 都是必需的(如上所述),因为它们显示来自 Web 服务请求的数据,所以如果我们使用 Interface Builder 来设计我们的 GUI,它们都是必需的。例如,标签可能是产品的“重量”或“高度”特征。

有没有人对如何以最可维护/可读的方式组织这些有什么好的建议?

干杯

替代文字

0 投票
5 回答
96980 浏览

sql-server - 我可以在 SQL Server 的添加列语句中创建命名默认约束吗?

在 SQL Server 中,我在表上有一个新列:

这失败了,因为我在没有指定默认约束的情况下指定了 NOT NULL。该表不应有默认约束。

为了解决这个问题,我可以使用默认约束创建表,然后将其删除。

但是,似乎没有任何方法可以指定默认约束应命名为该语句的一部分,因此我摆脱它的唯一方法是拥有一个在 sys.default_constraints 中查找它的存储过程桌子。

对于可能经常发生的操作来说,这有点混乱/冗长。有没有人对此有更好的解决方案?

0 投票
2 回答
280 浏览

unit-testing - 在处理 List 时重构单元测试以使其可维护和可读的挑战对象

在《单元测试的艺术》一书中,它谈到了想要创建可维护和可读的单元测试。在第 204 页左右,它提到应该尽量避免在一个测试中使用多个断言,并且可能将对象与覆盖的 Equals 方法进行比较。当我们只有一个对象来比较预期结果和实际结果时,这很有效。但是,如果我们有一个所述对象的列表(或集合)怎么办。

考虑下面的测试。我有不止一个断言。事实上,有两个单独的循环调用断言。在这种情况下,我将得到 5 个断言。2 检查一个列表的内容是否存在于另一个列表中,2 反之亦然。第 5 个比较列表中的元素数量。

如果有人有改进此测试的建议,我会全力以赴。我目前正在使用 MSTest,尽管我将 MSTest 的 Assert 替换为 NUnits 以获得流畅的 API (Assert.That)。

当前重构代码:

原始多断言单元测试:

0 投票
5 回答
4730 浏览

java - equals 和 hashCode 的通用反射辅助方法

我正在考虑为 equals 和 hashCode 创建一个反射辅助方法。

  • 在 equals 的情况下,辅助方法查看反射 API 到 objectA 的字段并将它们与 objectB 的字段进行比较。
  • 在 hashCode 的情况下,辅助方法查看反射 API 到字段并在迭代循环中计算 hashCode。

好消息是我不必担心 equals 或 hashCode 实现中缺少字段。不好的是我猜性能。你怎么看这个想法?请分享您的意见!

这是我为 equals 设计的初稿:

}

}

干杯,凯文

0 投票
5 回答
6551 浏览

java - java 1.5:为数据库表的列名保留常量的最佳实践?

技术: - Java 1.5 或 1.6 - Hibernate 3.4

为了避免在更改列名或表名时在多个位置更新列名,我希望有一个相同的常量文件。

我有以下疑问?

  • 一种可能的解决方案是维护一个全局文件,该文件存储数据库中所有表的列名的常量。像

    /li>

在上述情况下,employees 是表名,performance_desc 是列名。因此,如果两个不同的表都有列名,则遵循 tablename__columnname 格式来命名常量以避免两个不同表的两个常量之间的冲突。

我看到这种方法的一个问题是,随着数据库的增长,这个文件中的常量不会增长到数千个,这很难管理。其他问题是如果表名被更改,我必须更改所有表的前缀表名。

  • 假设如果我将上面示例中的列名从 performance_desc 更改为成就_desc。在这种情况下,我很可能也想更改常量,即从 EMPLOYEE__PERFORMANCE_DESC 更改为 EMPLOYEE__ACHIEVEMENT_DESC。因为在这种情况下,我需要同时更改列名和常量名,所以我看不到直接在我的代码中使用常量而不是列名,尽管有一个好处是在更改常量名时我可以使用折射来反映常量名称更改任何引用的地方。似乎没有太多使用常量,或者我使用错误的方式。

  • 在项目代码中,我似乎有人为每个表列列表定义一个类来定义常量,如下所示。

    /li>

这可以解决全局文件的一些问题,例如表名更改只会导致类名更改。一个主要问题是我使用类的唯一目的是定义常量,这不是好的编码习惯。

  • 阅读一些关于 Enum 与 value string 而不是 int 的地方,不确定它在 java 1.5 或 1.6 中是否可用,以及是否建议在给定场景中使用它。

  • 给定定义数据库常量的最佳实践是什么?

  • 使用 db 常量真的有用吗?

  • 如果我像上面提到的那样为每个表使用一个类,我面临的一个问题是命名约定。表名与定义表列常量的相应类名之间应该有什么关系。

  • 上述情况仅涵盖列名而不是表名的情况。我可能喜欢在代码中使用常量而不是表名,所以应该用什么方法来定义表名的常量。

  • 人们经常争辩说,一旦产品或相关版本发布,表名和列名并没有太大变化。表名和列名的更改主要发生在开发阶段或功能增强(新版本)。避免对表名或列名使用常量是否是强有力的论据?

    请建议我怎样才能让我的问题更具代表性,或者我错过了什么我的问题没有被投票?

0 投票
3 回答
903 浏览

jquery - JQuery:通过 DOM 操作插入大量 html - 可维护性?

我找到了关于使用 jquery 插入 dom 元素的良好做法的好帖子,例如thisthisthis

只需要插入一些元素就可以了,但在我看来,从可维护性的角度来看,这些选项非常糟糕(代码重复了两次,因此如果需要任何更改,它需要发生两次然后它变成很容易出错),

这是(只是一小部分)我所拥有的

有没有更好的方法来实现这一点?有没有办法告诉 jquery 复制 dom 树的一部分并将其用作要插入的片段?

很想学习替代品