Data Mapper:域对象永远不应该调用它的数据映射器?

时间:2009-12-29 21:41:00

标签: datamapper

我正在阅读Martin Fowler关于企业应用程序架构设计模式的书,但是德文版。因此,在我的第193页(如果你有的话)中,他用德语写道,域对象(业务逻辑层的一个对象)不应该依赖于它们的数据映射器。那么这更详细的含义是什么?如果我有一个User对象和一个UserDataMapper类,User的方法不应该调用UserDataMapper的方法吗?或者换句话说:如果没有UserDataMapper,它仍然可以使用User类而不会出错?

1 个答案:

答案 0 :(得分:4)

在我的版本中(用英文写的,所以确切的翻译可能会有所不同),完整的引用是:

  

“有时您可能需要域名   用于调用find方法的对象   数据映射器。但是,我发现了   有一个很好的懒惰负载(200),你可以   完全避免这个。为了更简单   但是,应用程序可能不值得   试图管理一切   关联和延迟加载(200)。   不过,你不想添加一个   从您的域对象依赖   你的数据映射器。

     

你可以通过使用来解决这个难题   分离界面(476)。放任何   找到域代码所需的方法   进入你可以使用的接口类   放在域名包中。“

因此,Fowler建议您使用Separated Interface来解决任何包依赖问题。

在实践中,这些映射往往是字段和方法等不显眼的属性,因此模型不知道你正在使用(比如说)Hibernate的事实,你可以在不破坏所有内容的情况下将映射器更改为其他内容

此外,有时人们将数据映射器部分拆分为映射部分(“此属性映射到此列”)和单独的服务部分(“这里是如何插入数据”),这进一步分离了关注点。