如果我们已经开发了自己的ORM框架并且该框架多年来工作正常,那么我们为什么要学习和使用全新的.net技术,如LINQ
或Entity Framework
或NHibernate
或CSLA.NET
我们即将推出的软件项目?
注意:新框架需要新的学习和教学努力。
注意:这只是一个类比。
答案 0 :(得分:15)
答案 1 :(得分:9)
因为您目前拥有的是专有的和未知的......并且如果您有新员工,您仍希望能够有效地开发代码。
编写自己的ORM没有任何问题,但实体框架2可能包含了一些您没有想到的内容 - 并且整个团队和社区背后都会让它变得更好,而您的代码却变得陈旧(我顺便说一句,这并不是说它只是一个例子。
从个人的角度来看,了解nHibernate是一种可转移的技能。知道CompanyXORM不是。
答案 2 :(得分:4)
在我看来,你应该至少检查一下这些新技术并将它们与你开发的技术进行比较 列出新技术的专业和缺点与您拥有的相比,并确定在您的下一个项目中使用哪些更好。< / p>
但是,如果你的框架是16岁,你真的应该小心,因为在这一点上它会阻止你在新项目中找到的一些情况。
答案 3 :(得分:4)
我的工作环境确实如此。我们有自从.NET 1.1开始构建的自定义ORM框架。
我们已逐渐接受新技术。为什么呢?
因为.NET框架现在提供了开箱即用的功能。抛出一大堆遗留代码,转而支持一些API调用只会有好处。
LINQ,扩展方法,lambdas等新的奖励大大提高了工作效率,有助于简化代码。毫无理由忽略它们。
如果您正在考虑其他ORM,请告诉您,许多非常有资格的人都参与其中,他们可能会比您更好。
如果你雇用新人,如果你建立在共同的框架之上,那么尽快让他们更有成效。否则,在他们学会了你的框架之前,你会受到很长的挫折。
如果你没有使用最新的花里胡哨,很多有趣的人都不适合你。或者,如果你设法欺骗他们唱歌,你可能无法长时间持有它们。
答案 4 :(得分:3)
你应该考虑另一件事:
成本与收益
花费多少钱给你:
另一个成本是你应该拥有的技术债务:我想你现在真的应该有一个伟大的债务 使用新框架可以减少所有这些成本(或大块)。
您可以从当前框架中获得的好处不应该跟上您使用它的成本。
答案 5 :(得分:2)
使用现有框架有很多优点。 - 知识。您邀请使用框架的每个人都必须学习它。另一方面,有很多人知道如何使用EF,NHibernate等。
知识。您可以找到有关现有框架的大量信息,提示,操作方法,书籍,视频等。如果想要为您的框架提供这些材料,则需要付出创建成本。
知识。尝试在StackOverflow中询问有关您自己的框架的问题。获得答案的可能性非常小。
演进。 NHibernate和EF不断发展。开发自己的框架的成本是你自己的,你不能与其他公司分享......当然,除非你出售它的许可证并与EF,NHibernate等竞争。
< / LI>错误。这与之前有关。你必须修复自己的错误,而不是简单地报告它们。
敏捷。这是他们中最大的一个。您的框架是否易于使用,并且可以像使用linq一样快速开发。像linq一样,很难建立一些想法。
语言整合。 Microsoft具有定义语言的优势,因此它适应框架。对于Linq,C#发展迅速。如果没有这些改进,Linq就不会存在。
保持自己的框架的唯一好处是你可以控制它。当您控制框架时,这是一种非常错误的安全感,但仍然无法控制您构建它的内容。住在舒适区有一种虚假的安全感。
答案 6 :(得分:2)
关键在于您每年投入多少时间和精力来维护这个已有16年历史的框架。您应该评估其他框架,看看它们是否符合您的具体需求以及这需要多少直接/间接成本。长期。
答案 7 :(得分:1)
当然,在改变方面存在一些痛苦,但有时而不是实现或维护存在的错误实现,这是一个更强大的长期策略,可以获得一个专注于问题领域的东西。
关于数据访问的特定域,如果您不使用LINQ / ADO.NET数据服务/ ORM,您会在以下几个方面找到令人信服的理由:
支持RESTful API访问您的数据库,这会阻止您在服务中实施大量合同和操作。
LINQ查询非常强大,可以在不进行往返的情况下操作数据。
远离数据访问的存储过程模型。
出现的框架/平台旨在与这些技术配合良好。例如,LINQ与WPF / Silverlight相处得很好,因为你处理的是普通旧C#对象/数据传输对象的许多IEnumerable集合。
这些仅仅是几个原因,但还有更多。社区一直是我喜欢使用室外项目的一个重要原因 - 如果你选择实体框架,那么要么是Microsoft生态系统,要么是围绕像NHibernate这样的项目非常有活力的开源社区。
虽然我觉得很多在这些项目上工作的人比我聪明,但是现在假设我很聪明,剩下的就是他们花了很多时间生活在该特定问题域内,我有其他问题,我的客户需要我关注。通过让John Smart或Jane Intelligent专注于ORM,我可以将更多时间花在与业务相关的问题上(“哦,是的,”是我的工作)。
答案 8 :(得分:1)
仅仅因为您的新雇主不会太在意您对某些专有内部框架的了解。他会询问获取LINQ或当时广泛的行业标准。
答案 9 :(得分:1)
即使这是一个非常古老的问题,我也是这样。
如果你的框架已经运行了很长时间并且你认为它真的很好你可能不需要切换到新技术,除非你清楚地看到新技术带给你的优势并解决你的一些痛苦与您当前的框架。框架随着时间的推移会变得过时,所以除非你付出很大的努力来维护你的框架,否则有一天你会继续前进。
根据经验 - 用另一个框架创建概念证明,以便您可以比较真实行为。
从另一方面来说:
我在公司工作,其中一些开发人员(受全球公司政策支持)认为他们的框架比公开的框架更好。当使用错误,难以使用,错误且完全无证的API时,我从未感到如此沮丧。结果是this question。是的,我离开了那家公司。
编辑:
我注意到你的框架已经16岁了?!我希望你做了一个改变 - 即使.NET不是那么老,所以它应该告诉你有多少东西已经改变了。除非你在大型机环境中工作(你不是因为使用的是.NET),因为这些东西长期存在,你必须每隔几年就向前推进一次。
答案 10 :(得分:0)
我可以想到几个原因。
所以看看这些论点,我认为你需要把问题转过来说。我的技术对这些其他技术有什么影响,值得吗?它可能是你可以添加到公共技术的东西吗?
答案 11 :(得分:0)
如果你的内部框架正如你所说的那样,16岁,那么你应该比安妮海瑟薇甩掉她庞码计划的意大利男友更快地抛弃它。抱歉,这简直不能有任何好处。
答案 12 :(得分:0)
在许多情况下,编写自己的ORM / CodeGen / Workflow / Other实现可以让您对应用程序的需求非常敏感。您可以自定义实施以完全满足所有要求,并随着需求的变化而发展。
另一方面,您负责维护,测试和调试的代码更多。如果有第三方实现也符合您的要求,那么考虑它们是有用的,因为它减少了团队的维护负担。此外,它将继续发展和改进,因为它是第三方开发人员的主要责任。产品中可能包含一些新功能和方法,您认为这些功能和方法很有用,或者无法想到,或者只是无法花时间来实施。最重要的是,您在培训新人时必须投入的资金量下降,因为可用的材料更多,而且他们已经熟悉该技术的可能性更大。
但是让我强调 - 做一些对你有意义的事情。如果您当前的ORM运行良好,则无需需要进行更改。如果确实需要对ORM进行更改,那么只要满足您的要求,考虑是否值得切换到其他内容是有用的。
答案 13 :(得分:0)
因为其他开发人员会讨厌使用它,并且因为让他们使用它而怨恨你。