您最喜欢用编程语言与数据库交互的方式是什么?[关闭]
-
08-06-2019 - |
解决方案
每次 ORM 时,我至少要考虑数据库越好。
其他提示
我真的很喜欢 3 + 1 层的做事方式。一层用于 UI,一层用于业务逻辑,一层用于持久数据。你说的是最后一个吗?领域对象和接口。这使得加载任何一个或两个主层以及域“层”成为可能,并且代码应该可以工作。
它很大程度上依赖于 依赖注入 和 控制反转 原则。数据/持久层只做两件事。它创建、读取、更新和删除数据,并将其映射到域对象格式。
UI 层的作用恰恰相反。它以用户可以关联的方式显示和接收数据,并将输出/输入映射到域对象格式或从域对象格式映射输出/输入。
业务逻辑层只需要知道一件事。商业逻辑。它不关心数据来自哪里,也不关心数据层将数据放在哪里。它知道它应该标记一个刚刚透支的帐户,但如何实际执行此操作并不是其工作的一部分。
域对象本身没有任何逻辑,它们只是在层之间传递数据的容器。这意味着您可以加载域对象和接口,而无需考虑依赖关系。
一天结束时,我觉得我有一个非常清晰的代码库,并且层次清晰。通过一些严格的接口和良好的基类,大部分编码只是告诉软件当 X 发生时要做什么。事情本来就该如此。
</rant>
编辑:哦耶。对于 LINQ 来说都是如此, 亚音速, ,以及其他 ORM。
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 的。
我们通过 Oracle.OleDBProvider 使用 Delphi 和 Oracle 数据访问组件 (ODAC) 和 ADO。
最喜欢的方法是将 Smalltalk 与 GemStone 对象存储库结合使用。为什么?没有需要处理的 ORM 问题。只有在雇主强迫或威胁的情况下,我才会考虑其他事情。
我最喜欢的方法是拥有一个对象抽象层。理想情况下,这是 仅有的 使用 SQL 的地方。但实际上,对象有时也需要执行 SQL 操作。但物体之外没有任何东西。
到目前为止,我自己编写了这样的层,因为可用的层太笨拙、太慢或太大。
我使用普通 JDBC,因为我正在开发数据驱动的应用程序,并且我的数据库模型非常复杂。数据库中描述了所有内容,甚至其他表的结构。除此之外,我还经常使用存储过程。因此 ORM 不是我的选择。
我喜欢 C# LINQ 到 SQL 对于任何新事物,但我真的很喜欢使用 .net层 + CodeSmith 生成器 如果我在 .NET 2.0 上使用 C#,则会在数据库中获得快速而脏的数据层。