有多种方法可以与数据库层连接和交互。例如,在 Java 中,常见用法是 数据库连接 原始 SQL、对象关系映射器、JDBCTemplate 的调用(春天)、存储过程等。

在您的语言中,您更喜欢哪个选项,为什么?什么时候才会考虑其他人呢?

有帮助吗?

解决方案

每次 ORM 时,我至少要考虑数据库越好。

其他提示

我真的很喜欢 3 + 1 层的做事方式。一层用于 UI,一层用于业务逻辑,一层用于持久数据。你说的是最后一个吗?领域对象和接口。这使得加载任何一个或两个主层以及域“层”成为可能,并且代码应该可以工作。

它很大程度上依赖于 依赖注入控制反转 原则。数据/持久层只做两件事。它创建、读取、更新和删除数据,并将其映射到域对象格式。

UI 层的作用恰恰相反。它以用户可以关联的方式显示和接收数据,并将输出/输入映射到域对象格式或从域对象格式映射输出/输入。

业务逻辑层只需要知道一件事。商业逻辑。它不关心数据来自哪里,也不关心数据层将数据放在哪里。它知道它应该标记一个刚刚透支的帐户,但如何实际执行此操作并不是其工作的一部分。

域对象本身没有任何逻辑,它们只是在层之间传递数据的容器。这意味着您可以加载域对象和接口,而无需考虑依赖关系。

一天结束时,我觉得我有一个非常清晰的代码库,并且层次清晰。通过一些严格的接口和良好的基类,大部分编码只是告诉软件当 X 发生时要做什么。事情本来就该如此。

</rant>

编辑:哦耶。对于 LINQ 来说都是如此, 亚音速, ,以及其他 ORM。

Ruby on Rails' 活动记录 用我迄今为止见过的所有东西擦地板。 LINQ 看起来在某些情况下它可能会更好,但 ActiveRecord 就是如此灵活。

LINQ 是我从现在开始要走的路

我更喜欢构建业务对象模型层(对象和对象集合)。

我将与数据库交互的能力构建到每个对象/集合中(对于 SQL Server,我使用 系统.数据.SqlClient)。我已将这种模式用于 SQL Server、MySQL 和 Oracle。

然后我与应用程序代码中的对象进行交互。

通过将数据库抽象为对象,无论后端数据库如何,我的应用程序代码都是一致的。

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 应用程序的“构建”时间,我可以更多地关注业务和表示逻辑。

我们使用混合方法,具体取决于什么适合应用程序中的特定情况:

  • 当阅读一页需要显示的信息并供用户更新时,我们使用 Hibernate
  • 当处理一批更新或汇总数据库中已存在的大部分数据时(例如日终处理)我们使用 PL/SQL(并尝试分组思考)
  • 当用户执行搜索或运行摘要报告时,我们使用 ibatis sqlmaps 构建一些 SQL 并仅返回我们感兴趣的字段(不是每一列,当然也不是任何不必要的子行,urggh)
  • 任何确实需要快速运行的事情,我们都会使用最有效的方法

这是使用 java/Oracle 的。

活动记录, ,这是福勒(Fowler)首先记录的模式(我认为) 企业架构模式. 。我相信它是用 Ruby 以外的语言实现的,尽管它作为 Rails 的核心技术而闻名。不管怎样,它是数据库的一个简洁的抽象,尽管我不得不承认我发现它在 find_by_sql 区域有点笨拙。但这可能只是我。

但是(现在戴上脾气暴躁的老人帽子)世界上所有的 ORM 都无法替代对 SQL 的良好了解,如果没有 SQL 知识,我真的不希望看到允许访问 RDBMS。

我们通过 Oracle.OleDBProvider 使用 Delphi 和 Oracle 数据访问组件 (ODAC) 和 ADO。

最喜欢的方法是将 Smalltalk 与 GemStone 对象存储库结合使用。为什么?没有需要处理的 ORM 问题。只有在雇主强迫或威胁的情况下,我才会考虑其他事情。

我最喜欢的方法是拥有一个对象抽象层。理想情况下,这是 仅有的 使用 SQL 的地方。但实际上,对象有时也需要执行 SQL 操作。但物体之外没有任何东西。

到目前为止,我自己编写了这样的层,因为可用的层太笨拙、太慢或太大。

我使用普通 JDBC,因为我正在开发数据驱动的应用程序,并且我的数据库模型非常复杂。数据库中描述了所有内容,甚至其他表的结构。除此之外,我还经常使用存储过程。因此 ORM 不是我的选择。

我喜欢 休眠 很多 :)

我知道它有一个学习曲线,但是一旦你掌握了它,它就会非常好。

不用说,我迫不及待地想得到新的 实体框架 在 .NET 3.5 SP1 中(我知道它已经可用,但我有点懒于输入 XML :))

我喜欢 C# LINQ 到 SQL 对于任何新事物,但我真的很喜欢使用 .net层 + CodeSmith 生成器 如果我在 .NET 2.0 上使用 C#,则会在数据库中获得快速而脏的数据层。

我们目前正在使用 奥达克 与 Oracle 数据库对话并使用大量 Oracle 包(PL/SQL)。n 层系统是通过 RemObjects 完成的,这意味着我们的客户端中没有任何 SQL,只需要发送 HTTP 请求的能力,因此没有安装开销。

所有这一切都是使用 Borland Delphi 完成的,并且已经在生产环境中工作了 2 年。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top