我想知道如何在数据映射器中给定Java的ResultSet对象来创建域模型。我阅读了Martin Fowler的书,在他的示例中,他将每个字段从ResultSet加载到数据映射器的方法中的局部变量中,该方法创建域模型,然后将所有这些局部变量逐个传递给域模型的构造函数。
问题是它只有在表包含2-5列的情况下才有效,否则你最终会得到10+局部变量和一个接受10+参数的构造函数。我不喜欢接受超过5个参数的构造函数或方法,10+太多了。不提我的域模型的构造函数也有来自依赖注入的参数,比如UnitOfWork。总之,我不想弄乱构造函数的签名。
我有两种可能的解决方案,但似乎都有问题。我绝对可以将整个ResultSet传递给域模型的构造函数,这样构造函数就只有2-3个参数。与此相关的还有一个问题,域模型和域层现在知道ResultSet的存在。据我所知,数据映射器应该作为域模型和结果集之间的中介。如果域模型直接操作结果集,这是一个糟糕的架构设计。从长远来看,它会带来更多的问题。
我还可以首先创建一个空域模型,然后使用它的setter方法向它的字段添加值。这种方法的问题是,我有一个UnitOfWork来监控域模型的状态,如新的、脏的、已删除的或干净的。UnitOfWork的机制是,每当调用域模型的setter方法时,它都会将对象标记为脏的并等待DB更新。因此,使用空域模型+ setter方法会导致每次调用setter时对象都被标记为脏。尽管我可以在返回域模型之前将其标记为clean,但是当我加载一个对象集合时,整个过程仍然很慢。
你怎么看?在给定既优雅又不消耗资源的Java ResultSet的情况下,有没有其他方法可以创建域模型?我没主意了.
发布于 2014-08-21 22:43:05
您可以考虑使用Builder pattern从ResultSet
构建模型。
https://stackoverflow.com/questions/21778489
复制相似问题