首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 重構:將存儲過程調用封裝為接口調用的標準模式

     編輯:程式設計疑難解答

需求背景

現有代碼直接在業務邏輯中調用存儲過程獲取數據,需重構為「調用接口」模式,解耦數據訪問細節,便於測試、遷移、多實現切換。

標準重構步驟

  1. 定義領域接口:
    public interface UserRepository {
        List findActiveUsers();
        User findById(Long id);
    }
    
  2. 提供具體實現(存儲過程版):
    
    public class StoredProcUserRepository implements UserRepository {
        private final JdbcTemplate jdbcTemplate;
        public List findActiveUsers() {
            return jdbcTemplate.query("{call sp_get_active_users()}", new UserRowMapper());
        }
        // ...
    }
    
  3. 依賴注入裝配(Spring 例):
    
    @Configuration
    public class RepositoryConfig {
        @Bean
        public UserRepository userRepository(JdbcTemplate jdbcTemplate) {
            return new StoredProcUserRepository(jdbcTemplate);
        }
    }
    
  4. 業務層面向接口編程:
    
    @Service
    public class UserService {
        private final UserRepository userRepository; // 構造器注入
        public List listActive() { return userRepository.findActiveUsers(); }
    }
    

進階收益

  • 可測試性:單元測試時注入 MockUserRepository,無需數據庫。
  • 遷移靈活:未來改用 MyBatis/JPA/HTTP API,只需新增 MyBatisUserRepository 實現,配置切換 Bean 即可,業務代碼**零修改**。
  • 多數據源/讀寫分離:接口不變,實現類內部路由不同 DataSource。

核心原則

**「依賴倒置原則 (DIP)」**:高層模塊(Service)不依賴低層模塊(存儲過程),雙方依賴抽象(Repository 接口)。** 這是從「過程調用」走向「接口調用」的本質。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved