php zf mvc中数据库层的架构问题
现在用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不希望太复杂的层次关系,也不想去写库表实体类,但起码能保持良好的扩展和维护,最好能较为清晰的体现面向接口的思想。
大家看看现在用的架构,能不能给出一个好的思路,拜谢了。