定义接口后,如何让多个实现类使用统一的数据校验等逻辑

设计来源

Github Java中台项目

一个绝对面向对象编程的中台项目,拒绝面条代码

问题描述

对于数据库的增删改操作,为了维护数据模型的完整性,我们定义了接口,然后统一操作数据。实现类可以选择不同的数据库,比如选择MySQL或者MongoDB等等,同时,不同实现类还可以选择不同的ORM框架,比如如果选择了MySQL存储数据,则可以选择jooq,mybatis等等ORM框架。对于不同的实现类,有很多操作是相同的,比如参数校验,缓存的设置,更新等等,这些操作不会因为选择了不同的数据库或者选择了不同的ORM框架而不一样,因此,为每个接口设计一个抽象类,在这个抽象类中完成这些相同的操作,然后把保存数据的工作交给具体的实现类。

举例

首先我们定义添加用户的接口

public interface UserManager {

void addUser(String username,String password);

}

然后定义抽象类,完成参数校验等工作,并且定义一个相应的**addUserDbOp**方法,供真正的实现类实现

public abstract class AbstractUserManager implements UserManager {

void addUser(String username,String password){

  // 参数校验

  // username唯一性校验


  // 保存到具体数据库中,可能是MySQL,使用的jooq ORM框架;也可能是MongoDB

  addUserDbOp(username, password);


  // 新添加的用户设置到缓存中

}

// 这个才是实现类真正需要实现的方法

protected abstract void addUserDbOp(String username,String password);

}


命名规范

如上面的代码,==addUserDbOp==作为==addUser==方法保存数据的一部分,因此,在==addUser==方法名后面加上==DbOp后缀==,

这样既有规律可循,又减少命名所带来的额外工作(有时候命名是很痛苦的一件事情)。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容