如何在ZF2中使用Entity,Mapper,Service和Hydrator

时间:2013-08-26 05:59:02

标签: service zend-framework2 entity domain-driven-design mapper

我正在制作ZF2应用。我正在使用实体,映射器和服务(例如UserEntity,UserMapper,UserService)来管理对象/模型。实体中的属性是CamalCased(例如FirstName,LastName),而在数据库中,字段使用下划线(first_name,last_name)。我将计划在检索或保存时使用水化器来映射属性和数据库字段。服务对象(UserService)将用于与映射器通信,以使用映射器检索和保存数据模型。水化器将转换映射器的结果并将它们转换为适当的实体。

我感到困惑的是,当服务(UserService)需要提供一些cirteria时 - 例如查找具有特定“姓氏”的所有用户,该服务是否将使用数据库字段名称(last_name)或实体属性name(LastName)?

如果在服务中使用了db字段名,那么db结构中的任何更改都需要我更新服务,这完全没有使用整个方法的原因。

1 个答案:

答案 0 :(得分:0)

如果你看看ClassMethods:hydrate方法(https://github.com/zendframework/zf2/blob/master/library/Zend/Stdlib/Hydrator/ClassMethods.php),你会发现它只是将属性从一个对象复制到另一个对象。您可以选择将属性名称转换为/来自camelCase,但就是这样。

如果更改数据库中的列名,则需要更改对象中的相应属性名称。反之亦然。我认为这是你问题的症结所在?

如果您希望使表列名与您的方法名无关,那么您需要一些可以在某处定义实际映射表的东西。更改列或方法名称,您只需要更新配置映射表。

不是ZF2专家所以我可能错了,但它看起来并不像任何提供的保湿器支持这一点。

我知道Doctrine 2支持它。