none
Multiplas decisões (C#) RRS feed

  • Pergunta

  • Boa tarde, eu estou com dúvidas em como fazer uma lógica que a mesma passa por várias decisões exemplo: eu já criei o métodos que verificam se o serviço existe, o seu tipo de inicialização (ativado, desativado...), seu status (iniciado, parado..), e de vários outros processos que serão realizado dependendo de como o serviço está (vou tentar exemplificar melhor).

    Verificações

    1º se serviço existe (se não existir seguir passo 2º, 3º e 4º - se existir pular para o passo 5º)

    2º verifica permissões

    3º instala o serviço

    4º inicia o serviço

    5º Verificar se o serviço esta ativado (se não passo 6º - se sim passo 7º)

    6º Ativar o serviço

    7º Fazer ao outras tarefas (nessas outras tarefas eu tenho mais um monte de decisões)

    Eu fiz uma forma que tem um monte de IFs mas no meu ponto de vista não ficou bom, queria ver se vocês me dão uma dica acho que da para fazer com evento e delegates.

    Obs.: estou criando um aplicativo que vai instalar impressoras, gerenciar serviços e outras coisas e o mesmo quando executado no computador ele verificara no banco de dados quais serão as configurações necessária para aquele computador, eu tenho o código que fazer o que eu preciso só que as decisões naquele monte de IFs estão confusas e algumas vezes falham, desde já obrigado se puderem me ajudar.

    terça-feira, 31 de janeiro de 2017 15:13

Respostas

Todas as Respostas

  • Olá,

    Inicialmente, eu recomendo separar as responsabilidades em métodos, de forma que cada um faça apenas uma coisa (tenha apenas uma responsabilidade). Isso já irá ajudá-lo a organizar e reutilizar seu código.

    Exemplo:

    public bool VerificarExistenciaServico()
    {
       //Código
       return success;
    }
    
    public bool VerificarPermissao()
    {
       //Código
       return success;
    }
    
    public bool InstalarSerico()
    {
       if (VerificarPermissao())
         //Código de instalação
       return success;
    }
    
    
    public bool IniciarServico()
    {
       //Código
       return success;
    }
    
    public bool VerificarServicoAtivo()
    {
       //Código
       return success;
    }
    
    public bool AtivarServico()
    {
       if (VerificarServicoAtivo())
          //Código
       return success;
    }


    E a estrutura principal que irá chamar tais métodos ficaria assim:

    if (!VerificarExistenciaServico())
       InstalarServico();
    IniciarServico();
    AtivarServico();
    //Demais códigos
    

    Acredito que fique bem simples e quase sem condições se separar de uma maneira mais adequada.

    Espero ter ajudado!

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    terça-feira, 31 de janeiro de 2017 16:02
  • Voce teria que usar uma estrutura de fluxo de tabalho (workfow) para substituir essa estrura de IF.

    aqui algumas bibliotecas para workflow:https://libraries.io/search?keywords=workflow&languages=C%23

    A idéia é criar uma estrutura de elementos encadeados onde cada elemento decide qual é o proximo passo, mais ou menos como faz o orchestration:

    Mas voce já pensou em utilizar o Docker? Pode ser mais simples que criar uma aplicaçao caseira para fazer a mesma coisa.

    "Docker é um projeto de código aberto que automatiza a implantação de aplicativos dentro de recipientes de software, fornecendo uma camada adicional de abstração e automação de virtualização de sistema de nível operacional em Linux, Mac OS e Windows."

    https://pt.wikipedia.org/wiki/Docker_(programa)

    https://www.docker.com/


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    terça-feira, 31 de janeiro de 2017 16:06
    Moderador
  • Obrigado pela atenção, eu já havia criado métodos seguindo está lógica, vou dar uma olha da no workflow que disseram também, muito obrigado pela dica.
    terça-feira, 31 de janeiro de 2017 17:30