Data Mapper将ResultSet传递给上层的正确方法

时间:2014-05-03 12:57:01

标签: java model-view-controller resultset datamapper

作为业余爱好者,我正在编写我的第一个使用JDBC连接到MySQL数据库的分层Java应用程序。 我将应用程序构建在四个包中,每个层一个:模型,视图,控制器和数据库。数据库类充当数据映射器,如下所示:

http://martinfowler.com/eaaCatalog/dataMapper.html

此设计非常适合插入,更新和删除,但如何处理从ResultSet返回的多行? Data Mapper应该知道模型并调用它的方法吗?

让我们说我想在视图中的JList中显示我的结果。哪个类有责任从ResultSet中检索数据并将其放入JList?

1 个答案:

答案 0 :(得分:0)

  

让我们说我想在视图中的JList中显示我的结果。哪个类有责任从ResultSet中检索数据并将其放入JList?

在我看来,这将是一个控制器,但它会将此责任委托给Data Mapper。 Mapper应该返回真实对象(从结果集中解析)

  

此设计非常适合插入,更新和删除,但如何处理从ResultSet返回的多行? Data Mapper应该知道模型并调用它的方法吗?

是的,Data Mapper应该了解模型结构。这是存在这种对象的目的 - 它知道如何在数据库中存储模型对象,并知道如何从数据库中检索它。

当您创建数据映射器(或数据访问对象或存储库或其他)时,您可以创建类似" crumple zone"在你的代码中。模型更改时,您只需要修复Data Mapper。如果没有Data Mapper抽象,您可能需要更改代码中的许多位置,这将花费更多的时间。

通常,您的Data Mapper可以使用模型对象的方法来设置它的状态。另一种方法是使用" package private"在模型对象中创建字段。访问修饰符 - 因此,如果您将Data Mapper放在同一个包中 - 它可以直接设置这些字段。