【问题标题】:What's the motivation behind differentiating any regular code and boilerplate code?区分任何常规代码和样板代码的动机是什么?
【发布时间】:2015-12-08 21:54:52
【问题描述】:

根据在线提供的信息,不难理解样板代码是什么。我不明白的是为什么需要将重复的代码部分命名为样板代码?如果有人仅仅为了它而创造了“样板代码”这个词,我会感到惊讶。一定有什么原因让我现在无法理解。

意识到一段代码是样板文件是否对开发人员有任何帮助?开发人员在编写样板代码时需要注意什么?

examples of boilerplate code that I have seen中,看来这段代码是无法避免的。如果代码是不可避免的,并且仅仅因为一个人正在编码而存在,那么强调它的动机是什么?


PS:用 C# 中的示例回答会非常有益。

【问题讨论】:

  • 在我的环境中,样板代码始终相同,因此可以从其他项目中逐字剪切和粘贴。其余代码并非如此。因此,如果样板代码被清楚地标记,那么恰到好处的代码将被剪切粘贴(可能会出现遗漏一行或包含额外行的问题)
  • 知道你有样板代码会让你思考,也许会尝试找到一个现成的解决方案,使你能够跳过该代码或替换你自己的代码。或者您将该代码移动到库中并重用它,而不仅仅是复制它。通常有一些解决方案可以帮助您避免自己编写样板代码。以 Spring 提供的 JDBC 抽象为例。
  • 将样板代码组合在一起的原因有很多。一种非常常见的策略是将样板代码放入可折叠区域,然后折叠该区域,允许开发人员扫描代码库而不会被自动创建的代码分心,这些代码不太可能手动更改(通常像getter/setter 或默认事件处理程序等)。

标签: c# boilerplate


【解决方案1】:

总之,动机是可重用性和自动化

示例: 在 ORM 中,数据库表中的属性将成为类的字段。因此,与其手动编写 getter 和 setter(这将是样板代码),不如编写代码来生成样板代码,并使这一过程自动化。现在,当一段时间后在表格中添加/减去列时,相应的 getter 和 setter 将自动添加/删除。



更长的版本,分别处理每个点:

我不明白的是,为什么需要将重复的代码段命名为样板代码?

首先要了解,这段“重复”的代码并不意味着相同。此处重复意味着可以由某种逻辑生成的代码类型。上面已经提到了一个最好的例子 - 类映射到数据库表的类的每个字段的 getter 和 setter。

在理解了这一点之后,区分常规代码和样板代码的需求就变得很明显了——重用以及自动生成样板代码。


意识到一段代码是样板文件是否对开发人员有任何帮助?

是的,当然。开发人员可以选择将其自动化。 Template Metaprogramming 就是一个很好的例子。不要害怕这个术语 - 它涉及自动生成源代码。在使用 ORM 的项目中很常见。


开发人员在编写样板代码时需要注意什么?

是的。不要写它。而是尽可能编写代码自动生成它。


在我看到的样板代码示例中,似乎无法避免这种代码。如果代码是不可避免的,并且仅仅因为一个人正在编码而存在,那么强调它的动机是什么?

这个问题是因为您误解了样板代码的真正含义。现在,我希望您的理解有所提高,因此您可能会猜到这个问题的答案是这个答案的第一行(又名可重用性和自动化)。



另外,我建议您阅读@JerryJeremiah 和@Marged 撰写的关于您的问题的cmets。随着对解决方案/项目/类中的所有代码部分可以分解为样板代码的更好理解,您会发现他们的 cmets 现在非常有用。

【讨论】:

    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多