代码之家  ›  专栏  ›  技术社区  ›  Patrick Peters

在项目中引入代码生成器。这会有风险吗?

  •  2
  • Patrick Peters  · 技术社区  · 16 年前

    我为一个.net项目(vs2008/.net 3.5)做了一个代码检查。我注意到许多业务实体和数据访问组件都是从头开始创建的,而没有实现复杂火箭科学代码的业务需求。

    许多审查问题都与数据访问层有关。

    在查看所使用的体系结构时,我建议将codesmith之类的代码生成器与.nettiers结合使用。

    技术负责人喜欢这个想法,但他说,引入这个想法是有风险的,因为团队正处于开发阶段,项目规模太小。

    在这个阶段引入一个代码发生器更好吗?

    (本主题不是关于必须使用哪个代码生成工具,而是关于何时引入或是否引入它的时间安排)

    5 回复  |  直到 16 年前
        1
  •  1
  •   Tommy Hui    16 年前

    在项目中间添加新的东西总是有风险的,特别是当新的东西替换旧的东西时。基本上,任何依赖于旧代码的代码都需要完全测试。这是改变的风险和成本的一部分。

    风险来自于虫子。假设一切正常,那就没问题了。但如果有问题怎么办?然后成本会上升,因为需要额外的时间来再次完成调试/测试周期。

    如果你还没有做任何测试的话,这在中间是唯一有意义的。但是,如果是这样的话,我会更担心总体质量,因为我更希望这样一个低层在整个过程中都经过彻底的测试。

        2
  •  1
  •   Michael Borgwardt    16 年前
    • 别管现有的手写代码了,至少现在是这样
    • 如果你能找到一个真正使开发新组件变得更容易/更快的代码生成器,那么我不知道它会带来什么风险,也不知道如何向开发人员“推销”
    • 虽然生成重复代码比手工编写要好,但它实际上只是一个创可贴
    • 理想情况下,您应该找到一种方法来提取重复的方面,这种方法允许您手动编写不重复的代码。
    • 例如使用 NHibernate 对于数据访问,这样就不必为每个域对象编写crud操作,而只需指定如何将它们映射到db表。
        3
  •  1
  •   eglasius    16 年前

    我会非常小心地在这样的团队中引入代码生成器。尤其是你提到的那些。也就是说,这可能因项目/团队而异。

    考虑:

    • 当前的手写dal是否足以满足项目的实际需求?如果您确实需要引入分页和其他类似功能,那么这一点尤其重要。如果团队没有这些,并且已经面临问题,那么他们很可能很难前进。我认为这更像是一个orm的例子,特别是一些简单的东西。
    • 团队中的一部分成员以前是否了解这些工具?那些成员在一个成功的项目中使用过它们吗?这比看起来更重要,特别是如果你考虑的是像nettiers这样广泛的东西,它会引入自己的问题/思维定势。考虑一些容易理解的事情,这不会让你彻底改变。
    • 您是否清楚地了解该工具及其使用方式如何影响开发人员引入更改的时间。无论使用哪种工具,都不要让它在文件上加上日期/时间,因为它在查看源代码管理日志时正在了解发生了哪些更改。无论您使用哪种工具,开发人员都应该能够轻松地使用它,如果没有,它将处于中间位置(特别是在正在进行的项目中)。
    • 如何将生成的代码与已生成的代码集成?如果这还不清楚,你可能是在说一个完全扔掉。如果您在这种情况下,引入新工具不太可能解决团队问题。
    • 您没有测试自动化。在没有测试自动化的情况下进行更改要困难得多,特别是因为很难不中断某些内容。

    前一段时间我们在几个项目中引入了nettiers(对我们来说似乎很好:).我们在项目开始的时候就这样做了,即使在那时它也真的处于中间。当然我们有更多更快的代码,但这并不意味着我们有更多重要的代码。新的特性开始用定制代码(加上linq2sql)开发,生产效率和质量迅速提高。我们再也没用过,也没错过。我们广泛地使用orms和其他更集中的代码生成器。

        4
  •  0
  •   Community Mohan Dere    8 年前

    你可以看看 T4 to generate code ,内置到visual studio中,无需额外安装。

    我读过一些 very useful tutorials 通过oleg,可以很容易地开始一次应用到开发的一个部分,从而降低所涉及的风险。如果证明它是值得的,就多用它。

        5
  •  0
  •   Dunk    16 年前

    我用代码生成器(不计算标准工具如Visual C++等)进行了几个项目。一开始他们很酷。实时储户。最后,几乎每个人都恨他们。对于以后添加的任何新功能,它们需要过多的裁剪或工作区。另外,一些可怜的schlub通常会永远被困在项目中,因为他们是唯一知道如何修改工具的人。你可能不想那个人是你:)

    正如michael所建议的,正确的方法是通过重新设计来找到消除重复编码的方法。