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
相关产品推荐
相关产品推荐

