1

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

4

1 回答 1

4

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

“有时您可能需要域对象来调用数据映射器上的查找方法。但是,我发现使用良好的延迟加载 (200) 可以完全避免这种情况。不过,对于更简单的应用程序,可能不值得尝试使用关联和延迟加载 (200) 管理所有内容。不过,您不想将域对象的依赖项添加到数据映射器。

您可以通过使用分离接口 (476) 来解决这个难题。将域代码所需的任何查找方法放入一个接口类中,您可以将其放入域包中。”

因此,Fowler 建议您使用分离接口来解决任何包依赖性问题。

在实践中,这些映射往往是字段和方法等上不显眼的属性,因此模型不知道您正在使用(例如)Hibernate 的事实,并且您可以将映射器更改为其他东西而不会破坏一切。

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

于 2009-12-29T21:48:41.963 回答