数据映射器:域对象不应该调用其数据映射器?
我正在阅读Martin Fowler的关于企业应用程序体系结构设计模式的书,但德文版。 因此,在第193页的书中(如果有的话),他用德语写道,域对象(业务逻辑层的一个对象)不应该依赖于它们的数据映射器。 那么更详细的意思是什么? 如果我有一个User对象和一个UserDataMapper类,那么User的任何方法都不应该调用UserDataMapper的方法? 或者换句话说:如果没有UserDataMapper,它仍然可以使用User类而不会出错?
在我的版本中(用英文书写,所以确切的翻译可能不同),完整的报价是:
“有时你可能需要域对象来调用数据映射器上的查找方法,但是,我发现使用良好的惰性负载(200)可以完全避免这种情况,但对于更简单的应用程序,可能并不值得尝试用关联和惰性加载(Lazy Load,200)来管理所有事情。但是,您不希望将域对象的依赖项添加到Data Mapper中。
你可以通过使用Separated Interface(476)来解决这个难题。 将域代码所需的任何查找方法放入可放置在域包中的接口类中。“
因此,Fowler建议您使用分离接口来解决任何软件包依赖性问题。
在实践中,这些映射往往是在领域和方法等方面不显眼的属性,因此模型不知道您使用(比如说)Hibernate的事实,并且您可以在不破坏所有内容的情况下将映射器更改为其他内容。
另外,有时候人们会将数据映射器部分分成映射部分(“此属性映射到此列”)和单独的服务部分(“这里是如何插入数据”),这进一步分离了关注点。
链接地址: http://www.djcxy.com/p/56249.html上一篇: Data Mapper: An domain object should never call its data mapper?