Una publicación de r/Python: CLI de un solo archivo 4K LOC con 18 subcomandos, que pregunta cuándo dividir. Esto recorre el marco y la división.
Requisitos previos
- Base de código CLI de Python
- Pruebas en un directorio separado
- Borrar lista de subcomandos
Guia paso a paso
Paso 1: Auditar acoplamiento de subcomandos
¿Comparten mucho el estado? ¿O son en su mayoría independientes?
# Per subcommand: list shared imports, shared state, shared helpers.Paso 2: Decidir en base a acoplamiento + navegabilidad
No LOC.
# Decision: 'I can't navigate it' or 'subcommand has 500+ LOC of independent logic' = split.Paso 3: Planificar el diseño del paquete
Módulo por subcomando.
# tool/
# __init__.py
# __main__.py # argparse dispatcher
# shared/
# commands/
# analyze.py
# migrate.py
# tests/Paso 4: Mover utilidades compartidas a compartida/
Cualquier cosa llamada por más de 2 subcomandos.
# Move: parse_yaml(), call_api(), pretty_print().Paso 5: Mueva cada subcomando a comandos/<nombre>.py
Importa utilidades compartidas.
# commands/analyze.py:
# from tool.shared.io import parse_yaml
# def analyze_cmd(args): ...Paso 6: Actualizar __main__.py para enviar
Los subanalizadores argparse se dirigen a comandos/<nombre>.py.
# import importlib
# subcommand = importlib.import_module(f'tool.commands.{args.command}')
# return subcommand.run(args)Paso 7: Ejecute todas las pruebas existentes
Debería pasar sin cambios de comportamiento.
# pytest tests/Ejemplo en Python
# A 4K LOC single-file with 18 subcommands typically splits in 3-6 hours.Ejemplo en JavaScript
// Pattern transfers to Node CLIs.Salida esperada
Modular Python CLI with shared utils + per-subcommand modules.