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