数据映射器:我的解释是否正确?
我正在尝试确认,我相信Data Mapper模式。 所以我们走吧:
A部分:数据映射器是一个用于创建,更新和删除另一个类的对象的类。 示例:称为Cat
的类和称为CatDataMapper
的Data Mapper。 还有一个名为cats
的数据库表。 但它也可能是一个名为cats.xml
的xml文件,或者是一个名为cats
的硬编码数组。 Data Mapper的重点在于释放使用Cat类的业务逻辑来思考“如何获得一只现存的猫”,或者“如何拯救一只猫”,“如何拯救一只猫”。 作为Data Mapper的用户,它看起来像一个带有定义好的方法(如getCat(int id),saveCat(Cat catObject),deleteCat(Cat catObject)等)的黑盒子。
B部分:首先,我认为如果Cat从CatDataMapper继承,将会很聪明,因为调用这些函数更方便一些。 例如,像catWithId(int id)这样的方法可以是静态的(类方法),并返回一个Cat的实例,用来自任何地方的数据进行初始化。 当我在我的代码中使用一个猫对象时,我可以简单地调用myCat-> save(); Data Mapper将存储它(不关心在哪里以及如何操作,Data Mapper将这种复杂性从用户身上隐藏起来)。
总之,我现在有点困惑;)您认为A部分适用于Data Mapper模式吗? 如果我按照B部分的描述加入,那会不好? 为什么?
我认为你的Section A对应于Martin Fowler给出的Data Mapper模式的定义
注意你的实现语言的细节。 在第二部分具有乙 catWithId()
是的静态成员cat
类可以与所述方法的多态行为干扰。
在Java中,JVM将根据声明的引用类型分派静态方法。
尝试一下:
1.使用静态方法catWithId(int id)
创建类CatDataMapper
2.创建Cat
CatDataMapper
类, CatDataMapper
具有所需的业务逻辑行为
3.将LoggedCat
Cat
子类记录所有活动,包括来自CatDataMapper
的活动
4.做Cat foo = new LoggedCat()
5.做Cat bar = foo.catWithId(5)
注意哪些方法被调用,它应该是静态方法CatDataMapper
不是静态方法LoggedCat
http://faq.javaranch.com/view?OverridingVsHiding对此进行了更深入的讨论。
我认为这是一个好方法。 除了使用的命名约定之外,您还可以在这里遵循一个众所周知的数据访问模式,并且允许Cat对象的用户执行CRUD操作,而无需与我的书中总是加上的CatDataMapper进行交谈。
如果您身处Java世界,我会为此使用Spring Container技术。
链接地址: http://www.djcxy.com/p/56281.html上一篇: Data Mapper: Is my interpretation correct?
下一篇: Data Mapper Pattern