Skip to content

Mejora: extraer un Facade de arranque para AppBydr #121

Description

@gabordonp

Hola @jzyong,
AppBydr.main() inicializa manualmente cuatro subsistemas (Redis, MongoDB, ScriptManager y BydrServer) en un orden específico. El mismo patrón se repite, casi idéntico, en AppCluster, AppGate y AppHall.
Situación actual: el cliente (main) conoce y coordina directamente cada subsistema, lo que dificulta mantener el orden de arranque consistente y complica agregar nuevos subsistemas.
Solución propuesta:
Introducir una clase BydrBootstrapFacade con un único método start(configPath): BydrServer que encapsule la secuencia de inicialización.
Beneficio:
Un punto único de mantenimiento para el arranque, y un patrón reutilizable para simplificar los demás módulos del proyecto. Quedamos atentos a sus comentarios.

  1. Implementación de BydrBootstrapFacade

public class BydrBootstrapFacade {

private JedisManager redisManager;
private BydrServer bydrServer;

public BydrServer start(String configPath) {
    redisManager = new JedisManager(configPath);
    redisManager.initScript(configPath);
    JedisManager.setRedisManager(redisManager);

    MongoManager.getInstance().createConnect(configPath);
    ScriptManager.getInstance().init(str -> System.exit(0));

    bydrServer = new BydrServer(configPath);
    new Thread(bydrServer).start();
    return bydrServer;
}

}

  1. Implementación simplificada en AppBydr

public final class AppBydr {

private static final Logger LOGGER = LoggerFactory.getLogger(AppBydr.class);
private static String configPath;
private static BydrServer bydrServer;

private AppBydr() {
}

public static void main(String[] args) {
    initConfigPath();
    // Ahora AppBydr utiliza la fachada para iniciar todos los sistemas
    bydrServer = new BydrBootstrapFacade().start(configPath);
}

private static void initConfigPath() {
    File file = new File(System.getProperty("user.dir"));
    if ("target".equals(file.getName())) {
        configPath = file.getPath() + File.separatorChar + "config";
    } else {
        configPath = file.getPath() + File.separatorChar + "target" + File.separatorChar + "config";
    }
    LOGGER.info("配置路径为: " + configPath);
}

public static BydrServer getBydrServer() {
    return bydrServer;
}

public static String getConfigPath() {
    return configPath;
}

}

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions