php zf mvc中数据库层的架构问题

leaftina 2012-02-01 05:20:31
现在用zf框架,结构目录有三个controllers,models,views。controller作为控制器调用model层数据返回给view层。

其中model层现在主要是用相对应的类去写,例如涉及到人员的,有一个User类作为model层的一个数据处理类,其中数据库通过db类初始化后调用。

我现在不想在User这个类中去操作数据库数据,即User类中只是处理数据逻辑但是不涉及到具体的数据库操作,涉及到数据库操作的我现在都封装成Bean,User类中通过一个Bean工厂去获取要使用的Bean类,例如涉及到用户表的,用一个UserBean类去操作,然后User类调用UserBean完成数据库的操作。

我用不同的接口封装了不同的方法,例如增删查改,还有数据导出等,Bean有个基类,初始化了db类等一些数据库操作方法,UserBean类继承Bean基类,然后根据需要实现不同的接口,例如添加接口中只有addData这个方法,修改接口中有modifyData方法,那么UserBean类就实现这两个接口。

我主要是想把model层和controller解耦,现在这种结构貌似可以把model层中的User类和UserBean类解耦。

但是我又有一个困惑,我觉得UserBean这种类里面,不应该被接口方法限定,而应该是灵活的定义取数据的方法,例如通过用户ID获取数据的方法就该是getUserInfoByUid(),通过用户名的方法应该是getUserInfoByUname(),但是如果在实现接口的UserBean中写这样的方法,那么与User这个类貌似就还是耦合的,下次就不能直接在User类中用别的类直接替换UserBean了,有悖于面向接口。所以我觉得实现接口的Bean这样的思路还是不太合理的。

大家有没有好的MVC架构方案,可以清晰的分离数据逻辑处理和数据库数据处理,同时又能保持松散的耦合度?

本人前两年从事对日java工作,应用spring和struts,以前的结构有dto,dro,entity,dao,form,库表对应封装了实体类,类层次关系较为复杂。现在做了两年PHP不希望太复杂的层次关系,也不想去写库表实体类,但起码能保持良好的扩展和维护,最好能较为清晰的体现面向接口的思想。

大家看看现在用的架构,能不能给出一个好的思路,拜谢了。
...全文
249 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
felixrong 2012-03-05
  • 打赏
  • 举报
回复
如果lz看zf的application/resource的源码,就会发现有个叫mappers的已经被registered了。
我现在就用mappers来做service层。所有的business logic都放在mapper里。
puter02003 2012-02-25
  • 打赏
  • 举报
回复
哎,你不懂的
coder 2012-02-02
  • 打赏
  • 举报
回复
可以参考一些设计模式相关的书籍。例如J2EE核心设计模式。把设计结构理清了,就好实现了。但是java和php的实现略有不同,可以灵活变通
leaftina 2012-02-02
  • 打赏
  • 举报
回复
是不是要实现结构分离就必须将表实体化?
leaftina 2012-02-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mengxiangbaidu 的回复:]

可以不用zf提供的数据库操作,自己定义自己的model的dao,entity,dbfacotry。或者用第三方的ORM库,例如doctrine。
[/Quote]
现在就是没有用zf的数据库操作,想自己做一套,最好有个清晰的思路
coder 2012-02-02
  • 打赏
  • 举报
回复
可以不用zf提供的数据库操作,自己定义自己的model的dao,entity,dbfacotry。或者用第三方的ORM库,例如doctrine。
leaftina 2012-02-02
  • 打赏
  • 举报
回复
求解惑啊

4,250

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧