如何使用数据映射器模式使用java结果集创建域模型?
那么我想知道如何在数据映射器中给定Java的ResultSet对象来创建域模型。 我阅读Martin Fowler的书,在他的例子中,他将ResultSet中的每个字段加载到数据映射器的方法中的局部变量中,该方法创建领域模型,然后将所有这些局部变量逐个传递给领域模型的构造函数。
问题是只有在表格包含2-5列的情况下才有效,否则最终会有10个以上的局部变量和一个接受10个以上参数的构造函数。 我不喜欢接受超过5个参数的构造函数或方法,10+太多了。 不要提到我的领域模型的构造函数也有依赖注入的争论,比如UnitOfWork。 总之,我不想搞乱构造函数的签名。
我有两种可能的解决方案,但都似乎有问题。 我完全可以将整个ResultSet传递到域模型的构造函数中,这样构造函数将只有2-3个参数。 这也涉及到一个问题,领域模型和领域层现在意识到了ResultSet的存在。 据我所知,数据映射器应该作为域模型和结果集之间的中介。 如果域模型直接操作结果集,那么这是一个糟糕的体系结构设计。 从长远来看,这将导致更多的问题。
我也可以先创建一个空域模型,然后使用其setter方法为其字段添加值。 这种方法的问题在于,我有一个UnitOfWork将域模型的状态监视为新的,脏的,删除或清理的。 UnitOfWork的机制是,无论何时域模型的setter方法被调用,它都会将该对象标记为肮脏并等待数据库更新。 因此,每次调用setter时,使用空域模型+ setter方法都会导致对象被标记为dirty。 即使我可以在返回它之前将域模型标记为干净,但在加载对象集合时,整个过程仍然很慢。
所以你怎么看? 给定一个既优雅又不耗费资源的Java结果集,是否有另一种方法来创建域模型? 我没有想法...
您可以考虑使用Builder模式从ResultSet
构建模型。
上一篇: How to create domain model with java resultset using the data mapper pattern?