【问题标题】:Recommended data structure for a Data Access layer数据访问层的推荐数据结构
【发布时间】:2010-11-14 05:31:01
【问题描述】:

我正在为数据库构建 DataAccess 层,建议使用什么数据结构来传递和返回集合?

【问题讨论】:

  • 好问题 .. 我一直在使用 DataSet 但不认为那是最好的 ..

标签: data-structures data-access-layer


【解决方案1】:

我使用映射到 db 表的数据访问对象列表。

【讨论】:

    【解决方案2】:

    我不确定您使用的是哪种语言,但总的来说,在简单性与可扩展性之间存在权衡。

    如果您直接返回 DataSet,您现在已经将自己与特定于数据库的类相耦合。这留下了很少的扩展空间 - 如果您允许访问文件或其他类型的数据源怎么办?但是,它也很简单。这就是记录集模式,C#/VB 对此提供了很多内置支持。 GUI 层可以访问记录集并轻松地操作数据。这适用于简单的应用程序。

    另一方面,您可以将数据集包装在自定义对象中,并提供网关方法(请参阅网关模式http://martinfowler.com/eaaCatalog/gateway.html)。这种方法更复杂,但提供了更多的可扩展性。在较大的应用程序中,当您需要分离业务逻辑、数据逻辑和 GUI 逻辑时,这是一种更健壮的方法。

    对于大型企业应用程序,您可以考虑使用对象关系映射工具 (ORM)。它们有助于自动将 java 对象映射到数据库表。它们隐藏了很多令人痛苦的 SQL 细节。 Spring 等框架为 ORM 提供了出色的支持。

    【讨论】:

      【解决方案3】:

      我倾向于使用对象数组,这样我就可以断开 DAO 与业务逻辑的连接。

      例如,您可以将 DAO 中的数据存储为数据集,并为它们提供一种在进行更新之前添加到数据库的简单方法,以便它们可以传入信息以进行修改操作,然后在需要时提交他们可以一次性完成的更改。

      我更喜欢用户不能自己添加/修改结构,因为这样更难确定数据库中必须更改的内容。

      通过最初返回一个数组,他们可以显示数据库中的内容。

      然后,随着表示层发生变化,控制器可以更新 DAO。通过松散耦合,整个系统变得更加灵活,因为您可以将 DAO 从数据集更改为其他内容,而应用程序的其余部分并不关心。

      【讨论】:

        【解决方案4】:

        有两个最通用的选择。

        查看 ResultSet 的第一种方法是作为 Map 列表,其中每个 Map 代表 ResultSet 中的一行。键是 FROM 子句中列出的列;这些值是数据库值。

        查看 ResultSet 的第二种方法是作为 List 的 Map,其中每个 List 代表 ResultSet 中的一列。 Map 键是 FROM 子句中列出的列;这些值是数据库值的列表。

        如果您不想做成熟的 ORM,这些可以带您走很长的路。

        【讨论】:

          猜你喜欢
          • 2011-01-31
          • 2013-08-20
          • 2013-06-25
          • 2010-10-16
          • 1970-01-01
          • 2019-07-31
          • 2015-09-25
          • 1970-01-01
          • 2017-10-10
          相关资源
          最近更新 更多