Usuário com melhor resposta
Multiplas decisões (C#)

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.
Respostas
-
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)
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Marcado como Resposta Robson William SilvaModerator terça-feira, 31 de janeiro de 2017 18:29
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 -
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)
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Marcado como Resposta Robson William SilvaModerator terça-feira, 31 de janeiro de 2017 18:29
-