TS-类型、接口、类、泛型综合使用-封装统一操作Mysql Mssql的底层库

646 阅读1分钟
/**
 * 功能:定义一个操作数据库的库   支持Mysql
 * 
 * 要求1: Mysql MsSql MyDb 功能一样  都有 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数据库的类
class MysqlDb<T> implements DBI<T> {
    add(info: T): boolean {
        return true;
    }
    update(info: T, id: number): boolean {
        throw new Error("Method not implemented.");
    }
    delete(id: number): boolean {
        throw new Error("Method not implemented.");
    }
    get(id: number): any[] {
        throw new Error("Method not implemented.");
    }

}
// 定义一个mysql数据库的类
class MsSql<T> implements DBI<T> {
    add(info: T): boolean {
        throw new Error("Method not implemented.");
    }
    update(info: T, id: number): boolean {
        throw new Error("Method not implemented.");
    }
    delete(id: number): boolean {
        throw new Error("Method not implemented.");
    }
    get(id: number): any[] {
        throw new Error("Method not implemented.");
    }
}

    // 定义一个mysql数据库的类
class MyDb<T> implements DBI<T> {
    add(info: T): boolean {
        throw new Error("Method not implemented.");
    }
    update(info: T, id: number): boolean {
        throw new Error("Method not implemented.");
    }
    delete(id: number): boolean {
        throw new Error("Method not implemented.");
    }
    get(id: number): any[] {
        throw new Error("Method not implemented.");
    }

}

// 操作用户类  定义一个user类和数据表做映射
class User {
    username: string | undefined;
    password: string | undefined;
}

let user = new User();
user.username = '藏三';
user.password = '123456';

let mysql = new MysqlDb<User>();
mysql.add(user);