Language agnostic 切换到ORMs

Language agnostic 切换到ORMs,language-agnostic,orm,Language Agnostic,Orm,我正在考虑将ORM分阶段应用到我支持的应用程序中。这个应用程序没有很好的结构,没有单元测试。因此,任何改变都是有风险的。我显然担心我有足够的理由改变。这样做的目的是减少用于数据访问的锅炉板代码,提高生产率 这与你的经历相符吗? 分阶段实施是否可能,甚至是一个好主意? ORM的缺点是什么?重构的规则是。做单元测试 所以,也许首先你应该为核心/主要的东西做一些单元测试 ORM的设计应该减少样板代码。创业的时间/麻烦与投资回报率取决于你的估计:)我听说TypeMock经常被用来重构遗留代码。我强烈建议

我正在考虑将ORM分阶段应用到我支持的应用程序中。这个应用程序没有很好的结构,没有单元测试。因此,任何改变都是有风险的。我显然担心我有足够的理由改变。这样做的目的是减少用于数据访问的锅炉板代码,提高生产率

这与你的经历相符吗?
分阶段实施是否可能,甚至是一个好主意?

ORM的缺点是什么?

重构的规则是。做单元测试

所以,也许首先你应该为核心/主要的东西做一些单元测试


ORM的设计应该减少样板代码。创业的时间/麻烦与投资回报率取决于你的估计:)

我听说TypeMock经常被用来重构遗留代码。

我强烈建议你买一本Michael Feather的书(所谓“遗留代码”Feathers指的是任何没有被单元测试充分覆盖的系统)。它充满了好的想法,可以帮助您进行重构并逐步采用最佳实践

当然,您可以分阶段引入ORM,最初使用它访问域模型的某些子集。是的,我发现ORM的使用加快了开发时间——这是一个关键的好处,我当然不会错过我曾经辛苦地手工制作数据访问层的日子

ORM的缺点——根据经验,在掌握所选ORM解决方案的概念、配置和特性时,不可避免地会有一些学习曲线


编辑:更正了作者的姓名

我认真地认为,将ORM引入遗留应用程序会带来麻烦(可能与完全重写一样麻烦)


除此之外,ORM是一种很好的方法,应该被考虑。

除非您的代码已经被设计为允许对模型层后端进行“热交换”,否则以任何方式更改它都是非常危险的

试图在架构糟糕的代码上构建单元测试的安全网并不能保证成功,只会让您在更改代码时感到更安全


因此,除非你有充分的商业理由来承担所涉及的风险,否则最好还是别管它。

我在一个大型ASP.net应用程序上工作,我们最近开始使用NHibernate。我们将大量手动保存到Sql Server的域对象移到了NHibernate。它简化了很多事情,并且随着时间的推移更容易改变事情。我们很高兴我们做出了改变,并在适当的情况下使用NHibernate进行了大量的新工作

迈克尔·费瑟(Michael Feathers)实际上写的《罗伯特·C·马丁》(Robert C Martin)这本书(“鲍勃叔叔”现在似乎是一个品牌!)是必须的

将单元测试放在一个没有使用它们开发的应用程序中几乎是不可能的——更不用说耗费大量时间了。这条守则就是不可修改

但这不是问题。重构是在不改变功能的情况下改变设计(我希望我没有太严重地破坏其中的含义),这样您就可以以更广泛的方式工作

从大块开始。设置一个可重复执行,并捕获所发生的事情作为后续执行的预期结果。现在,您的应用程序或至少部分应用程序正在测试中。当然,这不是一个非常好或全面的测试,但这只是一个开始,事情只能从那里变得更好

现在可以开始重构了。您希望开始提取数据访问代码,这样就可以用ORM功能替换它,而不会造成太多干扰。经常测试:使用遗留应用程序,你会惊讶于什么会中断;内聚和耦合很少是它们可能是什么

我也会考虑看马丁.福勒的,这显然是这个过程的决定性工作。