【问题标题】:How to create domain model with java resultset using the data mapper pattern?如何使用数据映射器模式使用 java 结果集创建域模型?
【发布时间】:2014-03-13 18:18:22
【问题描述】:

我想知道如何在数据映射器中给定 Java 的 ResultSet 对象来创建域模型。我阅读了 Martin Fowler 的书,在他的示例中,他将 ResultSet 中的每个字段加载到创建域模型的数据映射器方法中的局部变量中,然后将所有这些局部变量一一传递给域模型的构造函数。

问题在于它仅在表包含 2-5 列时才有效,否则您最终会得到 10+ 个局部变量和一个接受 10+ 个参数的构造函数。我不喜欢接受超过 5 个参数的构造函数或方法,10+ 太多了。更不用说我的域模型的构造函数也有依赖注入的参数,比如 UnitOfWork。总之,我不想弄乱构造函数的签名。

我有两种可能的解决方案,但似乎都有问题。我绝对可以将整个 ResultSet 传递给领域模型的构造函数,这样构造函数将只有 2-3 个参数。这里面还有一个问题,领域模型和领域层现在都知道ResultSet的存在了。据我所知,数据映射器应该充当域模型和结果集之间的中介。如果领域模型直接操纵结果集,那么它就是一个糟糕的架构设计。从长远来看,它会导致更多的问题。

我也可以先创建一个空域模型,然后使用它的 setter 方法向它的字段添加值。这种方法的问题在于,我有一个 UnitOfWork 监控域模型的状态为新的、脏的、已删除的或干净的。 UnitOfWork 的机制是,每当调用域模型的 setter 方法时,它将对象标记为脏并等待数据库更新。因此,使用空域模型 + setter 方法会导致每次调用 setter 时将对象标记为脏。尽管我可以在返回之前将域模型标记为干净,但当我加载对象集合时,整个过程仍然很慢。

那你怎么看?给定一个既优雅又不消耗资源的 Java ResultSet,是否有另一种方法来创建域模型?我没有想法......

【问题讨论】:

    标签: design-patterns jdbc model domain-driven-design datamapper


    【解决方案1】:

    您可以考虑使用Builder patternResultSet 构建您的模型。

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 2012-01-08
      • 1970-01-01
      • 2019-01-22
      • 2023-02-01
      • 2020-01-31
      相关资源
      最近更新 更多