我一直在研究.NET的一些不同产品,它们建议通过为业务对象提供一种无缝映射到自动生成的数据库的方法来加快开发时间。我从未遇到过编写数据访问层的问题,但我想知道这种类型的产品是否能真正节省它所声称的时间。我还担心我会放弃对数据库的过多控制,并且更难以追踪任何数据级问题。在数据库和业务对象结构必须改变的已经很难的情况下,这些类型的产品会变得更好还是更糟?
例如: Object Relation Mapping from Dev Express
从本质上讲,它值得吗?我会节省“那么多”时间,精力和未来的错误吗?
答案 0 :(得分:3)
我使用过SubSonic和EntitySpaces。一旦掌握了它们,我相信它们可以节省您的时间,但随着应用程序的复杂性和数据量的增长,您可能会超过这些工具。您开始浪费时间试图弄清楚性能问题是否与ORM或代码有关。所以,回答你的问题,我认为这取决于你。我倾向于同意Eric的观点,大批量企业应用程序不是通用ORM的好地方,但在标准票价较小的CRUD类型应用程序中,您可能会看到一些节省的时间。
答案 1 :(得分:1)
我发现Apache组中的iBatis是解决此问题的绝佳解决方案。我的团队目前正在使用iBatis将我们所有的调用从Java映射到我们的MySQL后端。这是一个巨大的好处,因为它很容易管理我们所有的SQL查询和程序,因为它们都位于XML文件中,而不是我们的代码中。无论语言是什么,将SQL与代码分开都是一个很好的帮助。
此外,iBatis允许您编写自己的数据映射器,以将数据映射到对象和从对象映射到数据库。我们想要这种灵活性,而不是为您做任何事情的Hibernate类型解决方案,但(IMO)也限制了您执行复杂查询的能力。
还有iBatis的.NET版本。
答案 2 :(得分:1)
我最近在Castle Project中为应用设置了ActiveRecord。这很容易上手。在用它创建一个新的应用程序之后,我甚至使用MyGeneration来编写ActiveRecord可以在很短的时间内使用的遗留应用程序的类文件。它使用NHibernate与数据库交互,但带走了NHibernate附带的所有xml映射。好的方面是,如果有必要的话,你已经在你的项目中使用了NHibernate,如果你有一些特殊的情况,你可以使用它的全部功能。我建议看看它。
答案 3 :(得分:0)
ORM有很多选择。 Linq to Sql,nHibernate。对于纯对象数据库,有db4o。
这取决于应用程序,但对于大批量的企业应用程序,我不会走这条路。您需要更多地控制数据。
答案 4 :(得分:0)
我周末和朋友讨论过这个问题,如果您需要能够在应用程序之外查询数据库,那么您在易于存储方面所取得的成果似乎就会丢失。我的理解是这些数据库的工作方式是以非规范化的方式存储对象数据。这样可以快速检索整个对象集,但如果您需要从与您的对象模型不匹配的透视图中选择数据,那么odbms可能很难获得您想要的特定数据。