Especialista em Divida Tecnica e Code Smells
Um agente de IA especializado em identificar code smells, divida tecnica e problemas de manutenibilidade que causarao problemas conforme seu codigo cresce. Encontra problemas estruturais antes que se acumulem.
Problemas estruturais que dificultam manter, estender ou entender o codigo
Problemas estruturais que indicam problemas mais profundos no design do seu codigo
Problemas de design orientado a objetos que dificultam alterar e testar o codigo
Violacoes de principios fundamentais de design que levam a codigo rigido e fragil
Caminhos de codigo complexos demais para entender, testar ou manter com seguranca
Limites objetivos que sinalizam quando o codigo precisa de refatoracao
Metodos devem caber em uma tela
Classes devem ter responsabilidade unica
Considere usar um objeto de opcoes
Extraia funcoes ou use retornos antecipados
Muitos caminhos para testar confiavelmente
Extraia para uma funcao compartilhada
Veja como o Consultor de Refatoracao identifica problemas e sugere padroes especificos
function processOrder(order) {
// Validar pedido
if (!order.items || order.items.length === 0) {
throw new Error('Pedido vazio')
}
if (!order.customer) {
throw new Error('Sem cliente')
}
// Calcular totais
let subtotal = 0
for (const item of order.items) {
subtotal += item.price * item.quantity
}
const tax = subtotal * 0.1
const total = subtotal + tax
// Aplicar descontos
let discount = 0
if (order.customer.isPremium) {
discount = total * 0.15
} else if (subtotal > 100) {
discount = total * 0.05
}
return total - discount
}Metodo fazendo 4 coisas: validacao, calculo, impostos, descontos
function processOrder(order) {
validateOrder(order)
const subtotal = calculateSubtotal(order.items)
const total = applyTax(subtotal)
return applyDiscount(total, order.customer)
}
function validateOrder(order) {
if (!order.items?.length) throw new Error('Pedido vazio')
if (!order.customer) throw new Error('Sem cliente')
}
function calculateSubtotal(items) {
return items.reduce((sum, item) =>
sum + item.price * item.quantity, 0)
}Extract Method: cada funcao faz uma unica coisa bem
function calculateShipping(order) {
switch (order.shippingType) {
case 'express':
return order.weight * 5.0 + 15
case 'standard':
return order.weight * 2.5 + 5
case 'economy':
return order.weight * 1.0
case 'freight':
return order.weight * 0.5 + 50
default:
throw new Error('Tipo desconhecido')
}
}Switch que cresce com cada novo tipo de envio
interface ShippingStrategy {
calculate(weight: number): number
}
const shippingStrategies: Record<string, ShippingStrategy> = {
express: { calculate: w => w * 5.0 + 15 },
standard: { calculate: w => w * 2.5 + 5 },
economy: { calculate: w => w * 1.0 },
freight: { calculate: w => w * 0.5 + 50 },
}
function calculateShipping(order) {
const strategy = shippingStrategies[order.shippingType]
if (!strategy) throw new Error('Tipo desconhecido')
return strategy.calculate(order.weight)
}Padrao Strategy: adicionar novos tipos sem modificar codigo existente
class OrderProcessor {
calculateTax(order) {
const subtotal = order.items.reduce((sum, item) =>
sum + item.price * item.quantity, 0)
const taxRate = order.customer.region === 'EU'
? order.customer.country.vatRate
: 0.0
return subtotal * taxRate
}
}OrderProcessor conhece demais sobre os internos de Order e Customer
class Order {
calculateSubtotal() {
return this.items.reduce((sum, item) =>
sum + item.price * item.quantity, 0)
}
calculateTax() {
return this.calculateSubtotal() * this.customer.getTaxRate()
}
}
class Customer {
getTaxRate() {
return this.region === 'EU' ? this.country.vatRate : 0.0
}
}Mover comportamento para a classe que possui os dados
O Consultor de Refatoracao nao apenas mede metricas — ele entende padroes de design e sugere tecnicas de refatoracao especificas que melhorarao a estrutura do seu codigo.
Identifica code smells e anti-padroes na estrutura do seu codigo
Sugere padroes especificos: Extract Method, Replace Conditional, Move Method
Verifica aderencia a SRP, OCP, LSP, ISP e DIP
Medir Metricas
Calcula comprimento de metodos/classes e pontuacoes de complexidade
Identificar Padroes
Detecta code smells e anti-padroes de design
Verificar SOLID
Verifica a aderencia aos principios de design
Sugerir Refatoracao
Recomenda padroes especificos como Extract Method, Replace Conditional with Polymorphism
Foca em problemas que VAO causar problemas de manutencao, nao em detalhes de estilo
Codigo copiado e colado que deve ser alterado em multiplos lugares
Classes fazendo muitas coisas, impossiveis de testar
Funcoes com muitos caminhos para testar confiavelmente
Ignorados em favor de problemas estruturais
A divida tecnica se acumula exponencialmente.
O Consultor de Refatoracao a detecta cedo.
Deixe o Consultor de Refatoracao detectar problemas estruturais antes que se acumulem. Gratis por 14 dias, sem cartao de credito.