You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中如何根据配置自动切换数据库连接类避免重复判断

优化方案:用接口抽象+工厂模式消除重复判断

步骤1:抽象统一接口

先把两个连接类的核心方法抽成公共接口,让两个类都实现它,这样后续可以统一调用,不用关心具体实现:

// 统一数据连接接口
interface IDataConnector {
    void connectToDb();
    List<?> getData();
}

步骤2:让两个连接类实现接口

改造现有的直连和API连接类,实现上面的接口:

// 直连数据库实现类
class DirectConnectionClass implements IDataConnector {
    @Override
    public void connectToDb() {
        // 直连数据库的逻辑
    }

    @Override
    public List<?> getData() {
        // 直连读取数据的逻辑
        return new ArrayList<>();
    }
}

// API连接数据库实现类
class ApiConnectionClass implements IDataConnector {
    @Override
    public void connectToDb() {
        // 通过API连接的逻辑
    }

    @Override
    public List<?> getData() {
        // 通过API读取数据的逻辑
        return new ArrayList<>();
    }
}

步骤3:创建工厂类集中处理判断逻辑

把原来分散在各个读取类里的配置判断,统一放到工厂类里,由工厂负责返回对应的连接实例:

class ConnectorFactory {
    // 根据配置获取对应的连接实例
    public static IDataConnector getConnector() {
        int connectionSetting = readConnectionSetting(); // 这里统一读取配置
        if (connectionSetting == 0) {
            return new DirectConnectionClass();
        } else {
            return new ApiConnectionClass();
        }
    }

    // 假设这是读取配置的方法,实际可根据项目调整
    private static int readConnectionSetting() {
        // 读取配置值的逻辑,比如从配置文件/环境变量读取
        return 0;
    }
}

步骤4:改造数据读取类,移除重复判断

现在各个数据读取类直接通过工厂获取实例,调用方法就行,不用再写判断:

class Class1 {
    void readData() {
        // 直接从工厂拿实例,不用自己判断
        IDataConnector connector = ConnectorFactory.getConnector();
        connector.connectToDb();
        List<?> data = connector.getData();
        // 后续处理数据逻辑
    }
}

额外优化:依赖注入(可选)

如果你的项目用了Spring这类框架,可以把两个连接类注册成Bean,通过配置值动态注入对应的实例,进一步解耦:

@Component
@ConditionalOnProperty(name = "connection.setting", havingValue = "0")
public class DirectConnectionClass implements IDataConnector {
    // ...实现逻辑
}

@Component
@ConditionalOnProperty(name = "connection.setting", havingValue = "1")
public class ApiConnectionClass implements IDataConnector {
    // ...实现逻辑
}

然后在读取类里直接注入接口实例:

class Class1 {
    private final IDataConnector connector;

    // 构造注入
    public Class1(IDataConnector connector) {
        this.connector = connector;
    }

    void readData() {
        connector.connectToDb();
        List<?> data = connector.getData();
        // 处理数据
    }
}

这样连工厂类的判断都交给框架处理,代码更简洁。


内容的提问来源于stack exchange,提问作者Dowlpack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 22:20:29