我们最喜欢通过编程语言与数据库进行交互的方式是什么?
有很多方法可以连接数据库层并与之交互。例如,在Java中,常见用法是原始SQL的JDBC调用,对象关系映射器,JDBCTemplate(Spring),存储过程等。
用语言,我们偏爱哪种选择,为什么?我们什么时候考虑其他人?
解决方案
回答
我更喜欢建立一个业务对象模型层(对象和对象的collecitons)。
我建立了与数据库交互到每个对象/集合的功能(对于SQL Server,我使用System.Data.SqlClient)。我已经将这种模式用于SQL Server,MySQL和Oracle。
然后,我与应用程序代码中的对象进行交互。
通过将数据库抽象为对象,无论后端数据库如何,我的应用程序代码都是一致的。
回答
每次进行ORM时,至少我必须考虑数据库的问题越多越好。
回答
LINQ是从这里开始为我服务的方式
回答
我真的很喜欢3 + 1层的做事方式。
UI的一层,业务逻辑的一层,以及持久化的数据。我们说的最后一个?域对象和接口。这样就可以加载任何一个或者两个主要层以及域"层",并且代码应该可以工作。
它在很大程度上依赖于依赖注入和控制反转原理。
数据/持久层仅做两件事。它创建,读取,更新和删除数据,并将其映射为域对象格式。
UI层则完全相反。它以用户可以关联的方式显示和接收数据,并将该输出映射到域对象格式或者从域对象格式映射到该输出。
业务逻辑层只需要知道一件事。商业逻辑。它不关心数据来自何处,也不关心数据层将数据放在何处。它知道应该标记刚刚透支的帐户,实际上如何做并不是真正的工作。
域对象本身没有任何逻辑,它们只是用于在层之间传递数据的容器。这意味着我们可以加载域对象和接口,而不必完全考虑依赖项。
归根结底,我觉得我的代码库非常清晰,各层明显分开。有了一些严格的接口和良好的基类,大多数编码只是告诉软件当X发生时该怎么做。只是应该如此。
</rant>
编辑:哦,是的。对于LINQ,SubSonic和其他ORM都是如此。
回答
ORM确实很棒。
我在python中使用SQL Alchemy时,它几乎可以与我遇到的每个DBMS一起使用。
对于MacOS X上轻量级数据驱动的应用程序,我使用Core Data,它具有出色的数据建模工具,可通过Xcode访问。
这些都表明ORM做得很好。我使用EJB的成功和享受较少。
回答
我还没有进入LINQ世界,但是我真的很喜欢Visual Studio通过XSD数据集完成的DataTable / TableAdapter类。通过在创建数据库架构后进行几次单击和单击,我现在有了一个具有强类型的DataSet / DataTable对象,并且有了一些适配器方法,这些方法对我的所有CRUD语句使用参数化查询到我的存储过程。它甚至会为未直接与表绑定的某些过程创建查询表适配器。
哦,如果我们还没有创建存储过程,而只是拥有表,那么向导将为我们创建过程或者即席SQL语句。
自Visual Studio 2005以来,这种情况就已经消失了,并且通过新的Web应用程序大大减少了我的"结构"时间,我可以将更多精力放在业务和表示逻辑上。
回答
在CI中,LINQ to SQL可以用于任何新事物,但是我真的很喜欢使用.netTiers + CodeSmith Generator在数据库中使用Con .NET 2.0获得快速而肮脏的数据层。
回答
到目前为止,Ruby on Rails的ActiveRecord可以将我看到的所有内容都抹掉。 LINQ在某些情况下看起来可能会更好,但是ActiveRecord是如此灵活。
回答
我非常喜欢休眠:)
我知道它具有学习曲线,但是一旦我们掌握了它,那就太好了。
不用说,我等不及要接触.NET 3.5 SP1中的新实体框架(我知道它已经可用,但是我有点懒于输入XML :))
回答
ActiveRecord,这是在Fowler的企业体系结构模式中首先记录的模式(我认为)。我相信它是用Ruby以外的语言实现的,尽管它是Rails中的核心技术。无论如何,它都是数据库的简洁抽象,尽管我不得不承认我发现它在find_by_sql区域中有些笨拙。但这可能只是我。
但是(现在戴上脾气暴躁的老人帽)世界上所有的ORM都不能代替对SQL的良好了解,没有它,我真的不希望看到完全允许对RDBMS的访问。
回答
当前,我们正在使用ODAC与Oracle数据库进行对话并使用许多Oracle软件包(PL / SQL)。 n层系统是通过RemObjects完成的,这意味着我们的客户端中没有任何SQL,只需要发送HTTP请求的能力,因此没有安装开销。
所有这些操作都是使用Borland Delphi完成的,并且在生产环境中已经工作了2年。
回答
我们使用一种混合方法,具体取决于哪种方法适合应用程序中的特定情况:
- 当阅读页面上值得显示的信息并供用户更新时,我们使用Hibernate
- 当处理一批更新或者汇总数据库中大多数数据的位置时(例如,一天结束时处理),我们使用PL / SQL(并尝试考虑集合)
- 当用户执行搜索或者运行摘要报告时,我们使用ibatis sqlmaps建立一些SQL,并仅带回我们感兴趣的字段(不是每列,当然也没有任何不必要的子行,urggh)
- 任何真正需要快速运行的方法,我们将使用最有效的方法
这是使用Java / Oracle的。
回答
我们通过Oracle.OleDBProvider使用Delphi和Oracle数据访问组件(ODAC)和ADO。
回答
可能最喜欢的方法是将Smalltalk与GemStone对象存储库一起使用。为什么?没有要处理的ORM问题。如果雇主强迫或者威胁,我只会考虑其他事情。
回答
我最喜欢的方法是拥有一个对象抽象层。理想情况下,这是仅适用于SQL的地方。但是实际上,对象有时也需要执行SQL-y事情。但是物体外没有任何东西。
到目前为止,我自己已经编写了这样的图层,因为可用的内容太尴尬,太慢或者太大。