public bool MeusDadosSaoValidos() { RegraDeNegocio violacaoDeRegra; if (string.IsNullOrWhiteSpace(Nome)) { violacaoDeRegra = new RegraDeNegocio("O nome da sonda não foi informado."); QuebraDeEspeficacao.Adicionar(violacaoDeRegra); } if (Planalto == null) { violacaoDeRegra = new RegraDeNegocio("O planalto a ser explorado não foi informado."); QuebraDeEspeficacao.Adicionar(violacaoDeRegra); } if (PosicaoAtual == null) { violacaoDeRegra = new RegraDeNegocio("A posição inicial da sonda não foi informado."); QuebraDeEspeficacao.Adicionar(violacaoDeRegra); } if (QuebraDeEspeficacao.HouveViolacao()) { return(true); } return(false); }
public void ObterCoordenadaDoPontoSuperiorDireitoDaMalhaDoPlanalto(string linha) { var caracteres = ObterCaracteresSeparadosPorEspaco(linha); if (caracteres.Length <= 1) { violacaoDeRegra = new RegraDeNegocio($"Mensagem inválida, coordenada do ponto superior-direito da malha do planalto só contém {caracteres.Length} caracter(s)."); RegrasNegocio.Adicionar(violacaoDeRegra); } else { int[] numeros = new int[2]; int contador = 0; foreach (var item in caracteres) { int numero = 0; if (!ENumero(item, out numero)) { violacaoDeRegra = new RegraDeNegocio("Mensagem inválida, coordenada do ponto superior-direito da malha do planalto não contém valores númericos."); RegrasNegocio.Adicionar(violacaoDeRegra); break; } numeros[contador] = numero; contador++; } if (!RegrasNegocio.HouveViolacao()) { coordenada = new Coordenada(numeros[0], numeros[1]); } } }
private void ObterPosicaoInicialDaSonda(string linha) { var caracteres = ObterCaracteresSeparadosPorEspaco(linha); if (caracteres.Length <= 2) { violacaoDeRegra = new RegraDeNegocio($"Mensagem inválida, posição inicial só contém {caracteres.Length} caracter(s)."); RegrasNegocio.Adicionar(violacaoDeRegra); } else { int[] numeros = new int[2]; string[] letras = new string[1]; int contador = 0; foreach (var item in caracteres) { int numero = 0; char letrar = ' '; switch (contador) { case 0: case 1: if (!ENumero(item, out numero)) { violacaoDeRegra = new RegraDeNegocio("Mensagem inválida, posição inicial não contém valores númericos."); RegrasNegocio.Adicionar(violacaoDeRegra); } else { numeros[contador] = numero; } break; case 2: letrar = Convert.ToChar(item); if (!char.IsLetter(letrar)) { violacaoDeRegra = new RegraDeNegocio("Mensagem inválida, posição inicial não contém caracter."); RegrasNegocio.Adicionar(violacaoDeRegra); } else { letras[0] = item; } break; } contador++; } if (!RegrasNegocio.HouveViolacao()) { posicaoInicioalDaSonda = new Posicao(numeros[0], numeros[1]); direcaoCardinalInicioalDaSonda = ObterDirecaoCardinal(letras[0]); } } }
public void Deve_informar_que_houve_uma_quebra_na_regra_de_negocio_na_qual_o_eixo_desejado_esta_fora_da_malha_para_exploracao() { var regraDeNegocio = new RegraDeNegocio("Posição fora da faixa (Malha do Planalto) para exploração."); var posicaoDesejada = new Posicao(6, 2); sonda.IniciarEm(posicaoDesejada, DirecaoCardinal.Norte); Assert.IsTrue(sonda.HouveViolacao()); Assert.IsTrue(sonda.EspecificacaoDeNegocio.Contem(regraDeNegocio)); }
public void Explorar(Planalto planalto) { if (planalto == null) { var violacaoDeRegra = new RegraDeNegocio("O planalto a ser explorado não foi informado."); QuebraDeEspeficacao.Adicionar(violacaoDeRegra); return; } Planalto = planalto; }
public Sonda(string nome) : this() { if (string.IsNullOrWhiteSpace(nome)) { var violacaoDeRegra = new RegraDeNegocio("O nome da sonda não foi informado."); QuebraDeEspeficacao.Adicionar(violacaoDeRegra); return; } Nome = nome; }
private void ObterSerieDeInstrucoesIndicandoParaASondaComoElaDeveraExplorarOPlanalto(string linha) { if (linha.Length < 1) { violacaoDeRegra = new RegraDeNegocio($"Mensagem inválida, série de instruções indicando para a sonda como ela deverá explorar o planalto só contém {linha.Length} caracter(s)."); RegrasNegocio.Adicionar(violacaoDeRegra); } else { var quantidadeDeCaracteres = linha.Length; serieDeInstrucoesIndicandoParaASondaComoElaDeveraExplorarOPlanalto = new string[quantidadeDeCaracteres]; for (int contador = 0; contador < linha.Length; contador++) { serieDeInstrucoesIndicandoParaASondaComoElaDeveraExplorarOPlanalto[contador] = linha[contador].ToString(); } } }
public void IniciarEm(Posicao posicaoDesejada, DirecaoCardinal direcaoCardinal) { if (posicaoDesejada == null) { var violacaoDeRegra = new RegraDeNegocio("A posição inicial da sonda não foi informado."); QuebraDeEspeficacao.Adicionar(violacaoDeRegra); return; } else { if (posicaoDesejada.X > Planalto.EixoX() | posicaoDesejada.Y > Planalto.EixoY()) { var violacaoDeRegra = new RegraDeNegocio("Posição fora da faixa (Malha do Planalto) para exploração."); QuebraDeEspeficacao.Adicionar(violacaoDeRegra); return; } } PosicaoAtual = posicaoDesejada; DirecaoAtual = direcaoCardinal; }
public string Iniciar(string mensagem) { if (string.IsNullOrWhiteSpace(mensagem)) { violacaoDeRegra = new RegraDeNegocio("Mensagem inválida."); RegrasNegocio.Adicionar(violacaoDeRegra); } string[] separadores = new string[] { "\n" }; string[] linhas = mensagem.Split(separadores, StringSplitOptions.None); if (linhas.Length < numeroDeLinhasNaMensagemEnviadaParaControlarAsSondas) { violacaoDeRegra = new RegraDeNegocio($"Mensagem inválida, só contém {linhas.Length} linha(s)."); RegrasNegocio.Adicionar(violacaoDeRegra); } if (!RegrasNegocio.HouveViolacao()) { TratarLinhas(linhas); } return(resultado); }