我想确认现在,我对数据映射器模式的看法。所以在这里我们去:数据映射器:我的解释是否正确?
部分A: 数据映射器是一个类用于创建,更新和删除另一个类的对象。示例:名为Cat
的类和名为CatDataMapper
的数据映射器。和一个名为cats
的数据库表。但它也可能是一个名为cats.xml
的xml文件,或者一个名为cats
的硬编码数组。 Data Mapper的重点在于释放使用Cat类的业务逻辑来思考“如何获得一只现存的猫”,或者“如何拯救一只猫”,“如何拯救一只猫”。作为Data Mapper的用户,它看起来像一个带有定义好的方法(如getCat(int id),saveCat(Cat catObject),deleteCat(Cat catObject)等)的黑盒子。
B节: 首先我想如果猫从CatDataMapper继承,因为调用这些函数则是更方便一点这将是聪明的。例如,像catWithId(int id)这样的方法可以是静态的(类方法),并返回一个Cat的实例,用的任何地方的数据初始化。当我在我的代码中使用一个猫对象时,我可以简单地调用myCat-> save(); Data Mapper将存储它(不关心在哪里以及如何操作,Data Mapper将这种复杂性从用户身上隐藏起来)。
总之,我现在有点困惑;) 您认为A部分是适用于数据映射器模式吗?如果我想按照B部分中所述那样进行,那会不好吗?为什么?
谢谢。请你能解释一下你最后一句话的意思吗“在B部分有catWithId()是猫类的静态成员可能会干扰该方法的多态行为。”?当cat类继承这个静态方法以创建一个基于给定id的初始化的新猫对象时,会出现什么问题? – openfrog 2009-12-28 19:11:32
如果你正在用Java实现,你只需要知道这个边界情况。 'catWithId()'方法对于这个“gotcha”行为可能是安全的。其他需要多态行为的方法会产生问题。不要忘记在junit测试中使用压倒一切的方法! – Andrew 2009-12-28 20:07:32