要求:MySql、MongoDb功能一样,都有四个方法:add、update、delete和get方法
注意:约束统一的规范,注意代码重用
解决方案:需要约束规范所以要定义接口,需要代码重用所以要用到泛型
1、接口:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范
2、泛型:泛型就是解决类、接口方法的复用性
//接口事先约定好有哪些方法,所有的数据库操作类都要实现这个接口 interface DBI<T>{ add(info:T):boolean; update(info:T, id:number):boolean; delete(id:number):boolean; get(id:number):any; } //操作mysql的类 //注意:要实现泛型接口,这个类也要是泛型,MySqlDb后面也要跟上泛型,否则报错 class MySqlDb<T> implements DBI<T>{ constructor(){ console.log('连接mySql数据库') } add(info:T):boolean{ console.log(info); return true; } update(info:T,id:number):boolean{ return true; } delete(id:number):boolean{ return true } get(id:number):any[]{ let list:any[] = []; //数据库得到的数据 return list } } //操作MongoDb的类 //注意:要实现泛型接口,这个类也要是泛型,MongoDb后面也要跟上泛型,否则报错 class MongoDb<T> implements DBI<T>{ constructor(){ console.log('连接MongoDb数据库') } add(info:T):boolean{ console.log(info); return true; } update(info:T,id:number):boolean{ return true; } delete(id:number):boolean{ return true } get(id:number):any[]{ let list:any[] = []; //数据库得到的数据 return list } } //定义用户表做映射 class User{ username:string | undefined; password:string | undefined; } //操作 let u = new User(); u.username = '111'; u.password = '222'; let sql = new MySqlDb<User>(); //用User类来约束传入的合法性 sql.add(u);