現有代碼直接在業務邏輯中調用存儲過程獲取數據,需重構為「調用接口」模式,解耦數據訪問細節,便於測試、遷移、多實現切換。
public interface UserRepository {
List findActiveUsers();
User findById(Long id);
}
public class StoredProcUserRepository implements UserRepository {
private final JdbcTemplate jdbcTemplate;
public List findActiveUsers() {
return jdbcTemplate.query("{call sp_get_active_users()}", new UserRowMapper());
}
// ...
}
@Configuration
public class RepositoryConfig {
@Bean
public UserRepository userRepository(JdbcTemplate jdbcTemplate) {
return new StoredProcUserRepository(jdbcTemplate);
}
}
@Service
public class UserService {
private final UserRepository userRepository; // 構造器注入
public List listActive() { return userRepository.findActiveUsers(); }
}
MockUserRepository,無需數據庫。MyBatisUserRepository 實現,配置切換 Bean 即可,業務代碼**零修改**。**「依賴倒置原則 (DIP)」**:高層模塊(Service)不依賴低層模塊(存儲過程),雙方依賴抽象(Repository 接口)。** 這是從「過程調用」走向「接口調用」的本質。