1: dao层不该该有太多业务逻辑,好比,一个方法就只保存一个数据库表操做. 对比了一下 JourneyDao 太多的业务处理了
2: 面向对象尽可能仍是多用对象具体化,少使用hashmap,如今暂时分为3层对象
1:vo 专门负责 request对象
2: model: 将接收进来的vo对象转化 ,好比传进来的是一些
3:po 只跟数据库有关系,且字段都跟数据要一致 ,没有冗余
这么作的缘由是:1:有时候咱们查询的一些数据,到前台的显示都彻底不太一致, 因此就有了model和vo之间的转换
2: model和po之间的转换,是为了避免污染数据操做层,好比dao写业务逻辑.因此咱们的model能够冗余各类list对象 ,好比journey冗余List<Address>
3:尽可能每一个接口都使用泛型,第一眼就能看出这个接口返回了什么对象,而后也能够点击进去看.而不是map对象或者Object对象.好比行程接口,我必须返回
Journey对象,其余的附属对象List<Address>嵌套在对象里面,而不是使用List嵌套hashmap.这个就彻底没有可读性而言了.对于开发来调用者来讲.
就必须一个一个方法查找,找到对应的key,并且不能写错.
4:对于一个对象的新增.或者修改方法,不管多少个字段,在dao层只写一个方法, 只是根据对象字段是否是为空逐个去更新.而不是修改一个字段,新增一条sql,这样写的话,就会很难维护了.
5:对于数据库查询也是,若是单表查询,应该也是dao只写一个方法,只是传输不一样的查询对象Critetai进来,建议最好也仍是不要用hashmap,
因此对于单表操做,在业务不是很复杂的状况下,大多数状况下会是单表的增删该查. 因此若是使用4和5的话,将会节约不少时间,和减小不少没必要要的bug,并且也好维护
6:代码中尽可能减小,if XX==null的判断 和 list.size的判断,因此咱们在查询的时候 就返回一个size为0的对象 .(由于NULL原本就是程序设计上的一个缺陷)
7:业务代码中尽可能不要写死代码,最典型的就是类型,type=1 type=2 ,都应该改为枚举 .如今journey里面有不少这样的状况,后续改进
8:分页组件也须要好好优化一下, 如今的分页,必需要本身手动写2条sql,一条查询信息,一条查总数, 按照道理应该只写一条就能够了,另一条,只不过是吧* 该成count.
9:对于代码中sql查询出来的list,须要作model和po转换的,最好不要写在service里面,一来显得 代码杂乱,二来很差公用 .
MVC的职责应该更加明确,各层的耦合度就越低,越低的话,可读性高(都是一样的一个套路来的),可维护性强(controller想换springmvc就Springmvc,想struts2就struts2,service想换dubbo就dubbo,想换probuf就换probuf,dao想换mybatis就换mybatis,想换hibernate就hibernate)
1:dao层只专一作某个数据库的增删改查 ,因此dao层,只传入跟数据库有关联的po对象.这样dao层的就不会显得臃肿了,简单的作一件事情,出错的话,也就好排查问题,并且对于扩展就更加方便了,由于没有跟业务代码耦合
因此dao只专一数据库的增删改查: 1:单表操做只传入PO对象,对应一条sql语句
2:对于多表查询,也只是传入一个sql须要执行的参数对象。
2:service也只尽可能写跟业务逻辑有关联的一些操做,对于相似 po和model这类的转换,虽然也是service应该作的,可是咱们仍是把它抽出来一个util,这样service也不会显得臃肿,并且util能够复用.
因此service只作几件事情:1 接收controller的参数,进行一些参数合法验证,尽早抛出异常
2:执行一些业务逻辑以后,将controller传过来的对象,转换成为dao层须要操做的po对象
3:调用dao执行
3:对于controller层,咱们也不该该耦合一些业务流程,它只负责把数据拿出去显示,因此,咱们接收到service返回的model对象.咱们惟一要作的就是,可能前端显示的跟咱们返回的不同,好比性别service返回0 或者1
而前端要显示男和女,这样转换就须要咱们去作了,
因此controller只作几件事情: 1:接收前端传过来的参数,进行一些字段的合法性验证
2: 操做权限等等的一些验证,好比登录权限 ,频率控制等等
3:接收service返回的对象,从新组装试图数据返回.
4: