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

设计来源

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后缀
这样既有规律可循,又减少命名所带来的额外工作(有时候命名是很痛苦的一件事情)。

你可能感兴趣的:(中台项目,java,mysql,java,mysql,mongodb,数据库)