2011-01-22 137 views
2

我正在使用Zend Framework为自定义CMS的用户构建用于设置ACL的Web界面 - 权限权限。由于ACL数据分布在5个表(用户,组,权限,urls = action + controller,用户理解的很好的权限名称),并且我只有一个控制器具有四个基本CRUD(创建,列表,更新,删除)操作我想知道什么是最好的方法来做到这一点?为多个表一起设计一个Zend模型?

我的书中的所有例子我都看到,每个模型扩展Zend_Db_Table_Abstract,因此代表一个表

我在想我必须做一个不扩展zend_db_table_abstract的模型,然后手动编写我需要的的查询这样就限制了我自己只能使用mysql数据库吗?

p.s.请不要在ACL数据库结构争辩

谢谢

回答

3

definition of the Table Data Gateway pattern

充当网关到数据库表的对象。一个实例处理表中的所有行。

这就是为什么你不会在Zend Framework中看到它有什么不同。这是一个Data Source Architectural Patterns而你问的东西是一个域特定的类。

您遇到的问题是Impedance Mismatch,这意味着Business Objects不匹配数据库设计的结构。常见的解决方案是使用DataMapperORM来为您处理。

另一种解决方案是在数据库中创建一个视图,以一种将1:1映射到所需业务对象的方式连接表。然后为该视图添加Zend_Db_Table。尽管如此,你仍然需要自定义创建,更新和删除逻辑。虽然这不是数据映射,但如果您没有任何业务/域类映射到,它没问题。

+0

所以如果我用手写出模型的4个函数(getAll,deleteById,create,updateById),就等价于数据映射是否正确? – max4ever 2011-01-22 14:55:18