mvurban 0 Denunciar post Postado Fevereiro 14, 2007 Olá pessoal,Estou desenvolvendo um novo projeto e iniciando sua estruturação. Estou com inúmeras dúvidas na parte da arquitetura e de como criar o projeto baseado em multicamadas. Já pesquisei muito sobre o assunto, mais geralmente encontro artigos muito superficiais ou no outro extremo artigos muito avançados que ainda não consigo entender. Então espero com esse tópico, poder discutir algo mais concreto e prático.O cenário é o seguinte: Tenho um formulário de cadastro de novos usuários, com nome completo, email, login e senha chamado CadastroUsuario.aspx (minha camada de apresentação). Já tenho a Tabela SqlServer criada e com inúmeros usuários já cadastrados.Nesse meu arquivo aspx tenho um botão de incluir que chama um método do arquivo CadastroUsuario.aspx.cs (Duvida 1: Este arquivo .cs já representa minha camada de negócios ou ainda é considerado a camada de apresentação?)No CadastroUsuario.aspx.cs faço a captura dos valores preenchidos no formulário e crio um objeto usuário a partir da classe Usuarios.cs que contém as propriedades (nome, email...) e métodos get e set associados.Em seguida chamo um método de criar usuários de uma outra classe, chamada UsuariosBS.cs (Minha camada de negócios) passando meu objeto usuário (criado em CadastroUsuario.aspx.cs). Nesta camada faço algumas verificações (como por exemplo se já existe um usuário cadastrado com aquele e-mail ou login) e se der algum problema, retorno ao cadastroUsuario.aspx.cs um valor falso e associado a isso uma variável out com a explicação do problema. Com esta variável posso preencher um Literal ou um Label na camada de apresentação com a mensagem de erro.Ainda nesta camada eu uso o try catch para tentar o cadastro (que ainda será feito em uma outra classe - UsuariosDA.cs descrita mais adiante) e em caso de erro (apenas erro de aplicação como conexao com o banco etc. Erros previstos como o caso do usuário já estar cadastrado eu retorno a explicação do erro na mesma tela de cadastro usando a variável out) redireciono pra uma página padrão de erro (configurado no web.config). Caso contrário retorno true e associado, uma variável out com mensagem de sucesso.No caso de tudo estar ok, aí então procedo a inclusão chamando um novo método Criar Usuarios de uma nova classe de nome UsuariosDA.cs (Que é a minha camada de dados) passando meu objeto Usuario. Esta camada chama uma nova classe que é responsável pela conexão com o banco e por execução de querys, chamada BaseBD.csEntão em UsuariosDA.cs conecto com o banco e finalmente incluo o novo usuário. No caso de problemas de conexão com o banco ou algum erro nessa inclusão o try cacth da minha camada de negócio absorverá o erro, gravará um log e mostrará tela padrão pro usuário.Dúvidas:2- Esse processo é bom? Sei que depende do tamanho da aplicação do que eu pretendo modularizar etc. Mais o que eu quero saber é se esse processo é um processo que me permitirá uma boa separção das camadas, uma boa manutenção e performance. Não pretendo ter independencia de bancos, vai ser tudo no SQL mesmo.3- Alguem tem alguma sugestão que melhore essa arquitetura ou a conserte caso tenha escrito um monte de besteira? 4- Minha Classe UsuariosDA.cs (camada de acesso a dados) deverá ser abstrada? Para que não se possa instanciá-la diretamente? Evitando assim que se chame a camada de dados antes da camada de negócios (por exemplo chamar UsuariosDA.cs a partir de CadastroUsuario.aspx.cs). Neste caso minha camada de negócios teria que herdar a camada de dados? Neste caso UsuariosDA.cs teria métodos protected Isso é correto? Teria uma forma conceitual mais indicada?A medida que a discussão se desenrolar acrecento novas dúvidas.Muito obrigado a todos que puderem colaborar com o tópico.Forte abraço. Compartilhar este post Link para o post Compartilhar em outros sites
Thiago.net 0 Denunciar post Postado Fevereiro 15, 2007 Opa, td bem?eu implementaria uma outra camada para criar commands, conexão , etc ...depois da DA (ou seja, na DA ficaria apenas o select ou criação dos parametros para o command caso esteja usando), recomendo no seu caso utilizar o Data Access Application Block. Compartilhar este post Link para o post Compartilhar em outros sites
Juliano.net 2 Denunciar post Postado Fevereiro 20, 2007 Já ouviu falar do modelo MVC (Model - View - Controller)? É um modelo que facilita a implementação de sistemas em 3 camadas. A combinação dele como o mapeamento Object E/R (mapeamento das entidades em forma de objetos) cria um forma bem mais simples e interessante, ainda mais pelo fato de existir o ObjectDataSource no .Net 2.0. Dê uma olhada em meu blog e veja o que postei sobre o MVC. O endereço é http://julianonetfox.spaces.live.com Compartilhar este post Link para o post Compartilhar em outros sites