我正在阅读Martin Fowler关于企业应用程序架构设计模式的书,但是德文版。因此,在我的第193页(如果你有的话)中,他用德语写道,域对象(业务逻辑层的一个对象)不应该依赖于它们的数据映射器。那么这更详细的含义是什么?如果我有一个User对象和一个UserDataMapper类,User的方法不应该调用UserDataMapper的方法吗?或者换句话说:如果没有UserDataMapper,它仍然可以使用User类而不会出错?
答案 0 :(得分:4)
在我的版本中(用英文写的,所以确切的翻译可能会有所不同),完整的引用是:
“有时您可能需要域名 用于调用find方法的对象 数据映射器。但是,我发现了 有一个很好的懒惰负载(200),你可以 完全避免这个。为了更简单 但是,应用程序可能不值得 试图管理一切 关联和延迟加载(200)。 不过,你不想添加一个 从您的域对象依赖 你的数据映射器。
你可以通过使用来解决这个难题 分离界面(476)。放任何 找到域代码所需的方法 进入你可以使用的接口类 放在域名包中。“
因此,Fowler建议您使用Separated Interface来解决任何包依赖问题。
在实践中,这些映射往往是字段和方法等不显眼的属性,因此模型不知道你正在使用(比如说)Hibernate的事实,你可以在不破坏所有内容的情况下将映射器更改为其他内容
此外,有时人们将数据映射器部分拆分为映射部分(“此属性映射到此列”)和单独的服务部分(“这里是如何插入数据”),这进一步分离了关注点。