2
respostas

Instanciando EntidadeDAO em controller de Model diferente

Gostaria de saber qual a maneira correta de instanciar entidades diferentes. Exemplo:

private TurmaDAO dao;

        public TurmaController(TurmaDAO dao)
        {
            this.dao = dao;
        }

Nesse caso queria utilizar métodos de outros DAO's.

No caso quero chamar o "DisciplinaProfessorTurma" que é uma outra entidade que fiz baseado na normalização de dados, chamando essa entidade eu consigo criar uma rotina de Realizar esse cadastro a cada cadastro de turma.

Eu consegui fazer isso sem a divisão de camadas entre Models e DAO, realizando as açoes de CRUD direto no Controller.

Exemplo:

if (ModelState.IsValid)
            {
                _banco.Matriculas.Add(novaMatriculaAluno);
                _banco.SaveChanges();
            }

            var aluno = _banco.Alunos.FirstOrDefault(x => x.Id == novaMatriculaAluno.AlunoId);

            var disciplinas = (from d in _banco.Disciplinas
                               join dpt in _banco.DisciplinaDoProfessoresNasTurmas on d.Id equals dpt.DisciplinaId
                               where d.Id == dpt.DisciplinaId && dpt.TurmaId == novaMatriculaAluno.TurmaId
                               select d).ToList();


            var mat = _banco.Matriculas.FirstOrDefault(x => x.AlunoId == aluno.Id);

            var con = _banco.Conceitos.FirstOrDefault(x => x.MatriculaId == mat.Id);

            if (mat != null && con == null)
            {
                var conceito = new Conceito
                {
                    MatriculaId = mat.Id
                };
                //matricular nas disciplinas da turma
                foreach (var d in disciplinas)
                {
                    conceito.DisciplinaId = d.Id;
                    _banco.Conceitos.Add(conceito);
                    _banco.SaveChanges();
                }
                return RedirectToAction("Index");
            }

Gostaria de saber se meu código esta muito poluído e difícil de ler....

2 respostas

O que eu fiz funcionou, que foi

No Controller TurmaController:

 public ActionResult Adicionar(Turma novoTurma)
        {
            if (ModelState.IsValid)
            {
                dao.Salvar(novoTurma);
                return RedirectToAction("GerenciarDisciplinaTurma", "DisciplinaDoProfessorNaTurma", new { turmaId =  novoTurma.Id});
            }
            ViewBag.EscolaId = new SelectList(_banco.Escolas, "Id", "NomeEscola", novoTurma.EscolaId);
            ViewBag.FuncionarioId = new SelectList(_banco.Funcionarios.Where(x => x.TipoFuncionario.DescricaoFuncionario.Contains("Professor")), "Id", "NomeFuncionario", novoTurma.FuncionarioId);
            return View(novoTurma);
        }//fim adicionar

na Classe TurmaDAO:

public void Salvar(Turma novaTurma)
        {
            dao.Turmas.Add(novaTurma);
            dao.SaveChanges();


            var listaDisciplinas = listarDisciplina();

            foreach (var item in listaDisciplinas)
            {
                SalvarDisciplinaNaTurma(item, novaTurma.FuncionarioId, novaTurma);
            }
        }


        public IList<Disciplina> listarDisciplina()
        {
            return dao.Disciplinas.ToList();
        }


        public void SalvarDisciplinaNaTurma(Disciplina disciplina, int professorId, Turma turma)
        {
            var novaDisciplinaProfessorTurma = new DisciplinaDoProfessorNaTurma();

            novaDisciplinaProfessorTurma.FuncionarioId = professorId;
            novaDisciplinaProfessorTurma.DisciplinaId = disciplina.Id;
            novaDisciplinaProfessorTurma.TurmaId = turma.Id;

            dao.DisciplinaDoProfessoresNasTurmas.Add(novaDisciplinaProfessorTurma);
            dao.SaveChanges();
        }

Acham que é a maneira correta de fazer esse processo?

Oi Fagner, acho que é mais legal você concentrar as operações sobre as classes de modelo, fora do dao. Dentro do dao acho mais legal ter apenas lógicas relativas ao banco de dados em si.