有许多方法可以连接数据库层并与之交互。例如,在Java中,常见的用法是对原始SQL,对象关系映射器,JDBCTemplate(JDBC),存储过程等进行Spring调用。
用您的语言,您喜欢哪个选项?为什么?你什么时候考虑其他人?
答案 0 :(得分:4)
ORM每次,至少我必须考虑数据库越好。
答案 1 :(得分:4)
我非常喜欢3 + 1层的做事方式。 UI的一层,业务逻辑的一层,以及持久化数据。你说的最后一个?域对象和接口。这使得可以加载任何一个或两个主层加上域“层”,代码应该可以工作。
它严重依赖dependency injection和Inversion of Control原则。 数据/持久层只做两件事。它创建,读取,更新和删除数据,并将其映射到域对象格式。
UI层完全相反。它以用户可以关联的方式显示和接收数据,并将输出/输入映射到域对象格式和从域对象格式映射。
业务逻辑层只需知道一件事。商业逻辑。它并不关心数据的来源,也不关心数据层的位置。它知道它应该标记一个刚刚透支的帐户,如何实际执行此操作并不是其工作的一部分。
域对象本身没有任何逻辑,它们只是在层之间传递数据的容器。这意味着您可以加载域对象和接口,而无需考虑依赖关系。
在一天结束的时候,我觉得我的代码库非常清晰,层次分明。通过一些严格的接口和良好的基类,大多数编码只是告诉软件在X发生时要做什么。应该是怎么回事。
</rant>
编辑:哦,是的。对于LINQ,SubSonic和其他ORM都是如此。
答案 2 :(得分:3)
Ruby on Rails'ActiveRecord用我迄今为止见过的所有内容擦拭地板。 LINQ看起来在某些情况下可能会更好,但ActiveRecord非常灵活。
答案 3 :(得分:2)
我更喜欢构建业务对象模型层(对象和对象的集合)。
我构建了与数据库交互到每个对象/集合的能力(对于SQL Server,我使用System.Data.SqlClient)。我已经将这种模式用于SQL Server,MySQL和Oracle。
然后我与应用程序代码中的对象进行交互。
通过将我的数据库抽象为对象,无论后端数据库如何,我的应用程序代码都是一致的。
答案 4 :(得分:2)
LINQ是我从这里开始的方式
答案 5 :(得分:1)
ORM确实太棒了。
我在python中工作时使用SQL Alchemy - 它几乎适用于我遇到的每个DBMS。
对于MacOS X上的轻量级数据驱动应用程序,我使用Core Data,它具有可通过Xcode访问的出色数据建模工具。
这两个都表明ORM做得很好。我对EJB的成功和享受较少。
答案 6 :(得分:1)
我还没有进入LINQ世界,但我真的很喜欢Visual Studio通过XSD数据集完成的DataTable / TableAdapter类。通过创建数据库模式后的一些拖动和单击,我现在有一个强类型的DataSet / DataTable对象,我有适配器方法,对我的所有CRUD语句的存储过程使用参数化查询。它甚至会为某些与表没有直接关联的过程创建查询表适配器。
哦,如果你还没有创建存储过程并且只有表,那么向导将为你创建过程或特殊的SQL语句。
自Visual Studio 2005以来,这已经出现,并且通过我的新网络应用程序彻底减少了我的“结构”时间,我可以更专注于业务和表示逻辑。
答案 7 :(得分:1)
我们使用混合方法,具体取决于适合应用程序中特定情况的方法:
这是使用java / Oracle。
答案 8 :(得分:0)
在C#中,我喜欢LINQ to SQL以获取任何新内容,但我真的很喜欢使用.netTiers + CodeSmith Generator来获取数据库快速而脏的数据层,如果我正在使用C#在.NET 2.0上。
答案 9 :(得分:0)
我很喜欢Hibernate:)
我知道它有一个学习曲线,但是一旦你掌握了它,就会很好。
毋庸置疑,我迫不及待地想要开始使用.NET 3.5 SP1中的新Entity Framework(我知道它已经可用,但我有点懒于输入XML :))
答案 10 :(得分:0)
ActiveRecord,这是Fowler Patterns of Enterprise Architecture中首先记录的模式(我认为)。我相信它是用Ruby以外的语言实现的,尽管它在Rails中作为核心技术而闻名。无论如何,它是数据库的简洁抽象,尽管我必须承认我发现它有点笨拙并且在find_by_sql区域。但那可能只是我。
但是(现在戴上Grumpy Old Man帽子)世界上所有的ORM都无法替代对SQL的良好了解,没有它我真的不喜欢看到允许访问RDBMS。
答案 11 :(得分:0)
我们目前正在使用ODAC与Oracle数据库通信并使用大量Oracle软件包(PL/SQL)。 n层系统是通过RemObjects完成的,这意味着我们的客户端没有任何SQL,只需要能够发送HTTP请求,因此无需安装开销。
所有这些都是使用Borland Delphi完成的,并且已经在生产环境中工作了两年。
答案 12 :(得分:0)
我们通过Oracle.OleDBProvider使用Delphi和Oracle数据访问组件(ODAC)和ADO。
答案 13 :(得分:0)
最喜欢的方法是将Smalltalk与GemStone对象存储库一起使用。为什么?没有ORM问题需要处理。如果被雇主强迫或威胁,我只会考虑别的事情。
答案 14 :(得分:0)
我最喜欢的方法是拥有一个对象抽象层。理想情况下,这是仅适用于SQL的地方。但实际上,对象有时也需要做SQL-y的事情。但没有任何东西在外面。
到目前为止,我自己写过这样的图层,因为可用的内容太笨拙,太慢或太大。
答案 15 :(得分:0)
我使用普通的JDBC,因为我正在开发一个数据驱动的应用程序,我的数据库模型非常复杂。数据库中描述了所有内容,甚至是其他表的结构。除此之外,我还使用了很多存储过程。因此,ORM不适合我。