🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
在重构M层代码以前,我们复习下前面我们各层的调用。 以删除数据为例, 我们完成一个删除操作的时序图如下: ![https://box.kancloud.cn/3fde443d763a03ce4cb793b8bc78c246_1418x574.png](https://box.kancloud.cn/3fde443d763a03ce4cb793b8bc78c246_1418x574.png) 通过上图,不难发现,在进行一般数据增删改查的操作时,server层只是起到数据转发的作用。当由C层获取到数据后,直接调用了实体层中的相应的方法。不错,如果不进行一些其它的逻辑的运算,server层在这里是可有可无的。但在实现的软件开发中,我们很少接触到只有简单的增删改查,所以server层的存在是有必要的。 我们在看实体层。我们在前面说过,实体(entity),其实对应的是数据表。即实体类中的第一项信息,都需要与数据库中的数据表相对应。 而在上图中,我们在实体层中,却增加了`getTeacherById()`及`delete()`方法。而数据表只能对应字段及对这些字段设置的set与get方法。所以,从规范性的角度上来讲,非set/get方法是不能写在实体类中的。 > hibernate还支持使用xml配置文件对实体进行定义,而xml文件中是不可能存在CURD方法,所以CURD方法必须由实体层脱离。 鉴于此,我们引入dao(data access object),数据访问对象层。我们不适合写在实体层中的语句,改写到DAO层。 改写后,我们在进行删除操作时,时序图如下: ![https://box.kancloud.cn/342246b6785779f663e8fa802b636174_1482x560.png](https://box.kancloud.cn/342246b6785779f663e8fa802b636174_1482x560.png) 此时,我们在数据访问DAO层中,写入具体的CURD的方法。而在实体entity层中,写入实体的属性。这样做使得代码更加的清晰,分工更加的明确,冗余度更低,代码更易维护。对实体entity层或是数据访问DAO层进行更改时,对另外一层不造成影响。更加有利于团队开发。 <hr /> 将教师实体中的CURD方法,转移至数据访问dao层。将调用dao层,来实现数据的CURD操作.