我们项目用的是传统的mvc框架(CI框架),为了更好的复用业务逻辑,我们新增了services逻辑层,在开发过程中代码复用性确实好了很多,但也遇到了问题:最明显的就是service之间的互相调用,我感觉这增加了service之间的耦合性。本来最开始想按照业务逻辑分模块划分不同的service,每个service只提供自己业务相关的方法,由controller层分别去调用不同的service层方法得到数据,然后组装成最终想要的数据输送给view层。但是遇到个这个问题,我需要提供一个方法给同事调用,这个方法要求会做很多业务逻辑处理,这会涉及到多个service,这个方法如果写在controller层,同事就无法在它的controller中使用,写在controller的父类中感觉这个方法仅仅是他的控制器能用到,于是最终我写在了一个service中,这个方法会分别去调用不同的service,然后组装并输出数据,这样就产生了耦合。。不知道有没有更好的解决方案,特别是在实际的开发过程中?然后就是model层的一些问题:我们原则上是一个数据表对应一个model,每个model只负责对应数据表的增删改查,由service层按照业务逻辑去调用不同的model获得数据,我们项目中很少有关联查询,这既有好处,也有坏处。有时关联查询更方便,但是这个查询方法写在哪个model里呢?放在哪个model的原则又是什么呢?最后,跨层调用不知道是否合理,有时controller层会直接调用model层。十分感谢。
2 回答
qq_笑_17
TA贡献1818条经验 获得超7个赞
mvc里面的model是指提交给jsp或者其他模板引擎,用于渲染的数据,是加工过的方便界面显示的数据,而数据库表的数据是原始的数据。所以model应该不直接对应数据库表。一般来说不需要model层,model只是存放数据的对象,一般是ORM里面的bean,增删查改的逻辑由service层调用ORM实现。关联查选也由service层调用ORM实现。model只是一些实体类,pojo对象,不是一个包含业务逻辑代码的层。service层可以互相调用,但双向调用很不好,改造为单向调用比如serviceA调用serviceB,那么serviceB就不要调用serviceA。controller层的职责就是组合service层的功能,由controller来调用service组装是最好的。
添加回答
举报
0/150
提交
取消