CAMADAS
Olá, Boa Tarde!
Gostaria de saber dos colegas se a camada DTO é obrigatória para a camada DAO, e caso não seja, como eu poderia passar os dados dos objetos (ex: cliente.Nome) para a camada Dao?
Um outro ponto que gostaria de saber é sobre string de conexao. Em qual camada eu devo inserir a string de conexao e por que usar um web.config para isso ao invés de criar uma classe para isso?
vlw
Gostaria de saber dos colegas se a camada DTO é obrigatória para a camada DAO, e caso não seja, como eu poderia passar os dados dos objetos (ex: cliente.Nome) para a camada Dao?
Um outro ponto que gostaria de saber é sobre string de conexao. Em qual camada eu devo inserir a string de conexao e por que usar um web.config para isso ao invés de criar uma classe para isso?
vlw
Nada é obrigatório. Você usa um DTO se você quiser.
Na camada DAO, crie um método que recebe um objeto(acostume-se a chamar de Entidade). Esse método já recebe a entidade preenchida, ou seja, se quiser por exemplo, imagine a estrutura:
Classe Cliente
propriedade Codigo Integer
propriedade Nome String
propriedade DataNascimento DateTime
propriedade Sexo Integer
Fim Classe
Para inserir um cliente, você faria algo como:
Dim cli As Cliente = New Cliente
cli.Nome = [Ô]Zezinho[Ô]
cli.DataNascimento = DateTime.Now
cli.Sexo = 1
Dim cliDAO As ClienteDAO = new ClienteDAO
cliDAO.Inserir(cli)
E no método [Ô]Inserir[Ô] da classe ClienteDAO, teria algo como:
<pseudo-código>
Method Inserir(Cliente -> parametroCliente)
Instacia conexão
codigo = Buscar_Proximo_numero_Cliente
SQL([Ô]Insert into cliente(codigo, nome, datanascimento, sexo) Values(@codigo, @nome, @data, @sexo)[Ô]
SQL.Parametro([Ô]@codigo[Ô], codigo)
SQL.Parametro([Ô]@nome[Ô], parametroCliente.Nome)
SQL.Parametro([Ô]@data[Ô], parametroCliente.DataNascimento)
SQL.Parametro([Ô]@sexo[Ô], parametroCliente.Sexo)
SQL.Executar
/Method
Quanto à string de conexão, o ideal é que ela não esteja nem no config nem na aplicação. O ideal para isso é ter um arquivo encriptado que vai ser lido para uma outra classe que vai ter uma propriedade do tipo SqlConnection(ou OracleConnection, FBConnection... de acordo com o banco que você usa). No construtor dessa classe, leia e desencripte o conteúdo do arquivo encriptado. Esse arquivo, contém os dados para formar a string de conexão, como nome do host, porta, banco, usuário, senha, e qualquer outro parâmetro que você precisar.
Na camada DAO, crie um método que recebe um objeto(acostume-se a chamar de Entidade). Esse método já recebe a entidade preenchida, ou seja, se quiser por exemplo, imagine a estrutura:
Classe Cliente
propriedade Codigo Integer
propriedade Nome String
propriedade DataNascimento DateTime
propriedade Sexo Integer
Fim Classe
Para inserir um cliente, você faria algo como:
Dim cli As Cliente = New Cliente
cli.Nome = [Ô]Zezinho[Ô]
cli.DataNascimento = DateTime.Now
cli.Sexo = 1
Dim cliDAO As ClienteDAO = new ClienteDAO
cliDAO.Inserir(cli)
E no método [Ô]Inserir[Ô] da classe ClienteDAO, teria algo como:
<pseudo-código>
Method Inserir(Cliente -> parametroCliente)
Instacia conexão
codigo = Buscar_Proximo_numero_Cliente
SQL([Ô]Insert into cliente(codigo, nome, datanascimento, sexo) Values(@codigo, @nome, @data, @sexo)[Ô]
SQL.Parametro([Ô]@codigo[Ô], codigo)
SQL.Parametro([Ô]@nome[Ô], parametroCliente.Nome)
SQL.Parametro([Ô]@data[Ô], parametroCliente.DataNascimento)
SQL.Parametro([Ô]@sexo[Ô], parametroCliente.Sexo)
SQL.Executar
/Method
Quanto à string de conexão, o ideal é que ela não esteja nem no config nem na aplicação. O ideal para isso é ter um arquivo encriptado que vai ser lido para uma outra classe que vai ter uma propriedade do tipo SqlConnection(ou OracleConnection, FBConnection... de acordo com o banco que você usa). No construtor dessa classe, leia e desencripte o conteúdo do arquivo encriptado. Esse arquivo, contém os dados para formar a string de conexão, como nome do host, porta, banco, usuário, senha, e qualquer outro parâmetro que você precisar.
Citação:Para inserir um cliente, você faria algo como:
Dim cli As Cliente = New Cliente
cli.Nome = [Ô]Zezinho[Ô]
cli.DataNascimento = DateTime.Now
cli.Sexo = 1
Dim cliDAO As ClienteDAO = new ClienteDAO
cliDAO.Inserir(cli)
eu estou encontrando dificuldades nessa codigo acima.
Por exemplo: Para mim utilizar o cliente como parametro no metodo inserir da camada DAO, a camada DAO precisaria ter uma referencia da Camada de Negocio (BLL). é correto isso? Não teria que ser o contrario, como por exemplo a camada de negocio (BLL) fazer referencia a camada Dao e utilizar o DAO em seus metodos CRUD?
Outra duvida agora: é correto utilizar a camada DAO na camada de apresentacao para persistir os objetos ou eu teria que fazer isso na BLL chamando o Dao?
Citação:Para mim utilizar o cliente como parametro no metodo inserir da camada DAO, a camada DAO precisaria ter uma referencia da Camada de Negocio (BLL). é correto isso?
Sim. A camada DAO, trabalha com as entidades, por isso ela precisa ter referência ao namespace das entidades. Porém o contrário, não pode acontecer, na camada de entidades, ter acesso à s camadas DAO.
Citação:é correto utilizar a camada DAO na camada de apresentacao para persistir os objetos ou eu teria que fazer isso na BLL chamando o Dao?
Não é muito correto, o correto é mesmo como você falou, usar Business Layer na apresentação. Mas existem muitos casos em que não existe uma camada de business, então se usa a camada DAO mesmo. Claro, o ideal é ter sempre uma BLL, mesmo que não tenha nada nela, apenas a chamada para a DAO. E em ambos os casos, tanto a BLL como a DAO, precisam ter referência à camada de entidades. As entidades, não são algo que deve ser escondido, bem pelo contrário, elas devem ser expostas para a aplicação inteira. O que não pode ser exposto, na teoria é a DAO.
Entendi tudo só fiquei com uma pequena duvida agora: A camada BLL é a mesma das Entidades ou as Entidades ficam numa outra camada? Se sim, como eu posso fazer referencia da camada Dao para a camada BLL e vice versa? o visual studio me impede de fazer referencia as duas. ele diz que só uma pode referenciar a outra, pois senao causa uma dependencia circular.
As camadas seriam:
BLL
DAO
UI
existe algo a mais ou é isso ai mesmo?
As camadas seriam:
BLL
DAO
UI
existe algo a mais ou é isso ai mesmo?
O fluxo é:
Apresentação -> BLL -> DAO
Todas as três tem referência à s entidades e essas camadas não precisam estar em projetos separados...
Apresentação -> BLL -> DAO
Todas as três tem referência à s entidades e essas camadas não precisam estar em projetos separados...
ok. Mas onde ficam essas entidades, na DTO ou na BLL mesmo?
só falta isso para mim entender.
só falta isso para mim entender.
Se você quer realmente fazer me camadas eu sugiro estudar algum design pattern, no caso do ASP.Net eu gosto de usar o MVP (Model View Presenter), mais especificamente usando o framework chamado WebformMVP, que é próprio para ASP.Net com WebForms
Nele você tem basicamente 3 camadas, o Model, que é a camada responsável por todo o acesso ao banco de dados, o View, que é a interface, e o Presenter que é quem cuida de toda a lógica, além disso se pode usar algum ORM, como por exemplo o EntityFramework (no meu caso eu uso o Xpo da DevExpress) ou qualquer outro para facilitar o acesso aos dados e também para tornar tudo mais orientado a objetos.
Com o MVP você vai ter essas 3 camadas para cada página ou webusercontrol do programa, fica tudo bem organizado e se fizer direitinho fica muito bom para se dar manutenção, principalmente tentando separar tudo que puder em webusercontrols para manter a responsabilidade de cada parte do programa no minimo possÃvel.
Nele você tem basicamente 3 camadas, o Model, que é a camada responsável por todo o acesso ao banco de dados, o View, que é a interface, e o Presenter que é quem cuida de toda a lógica, além disso se pode usar algum ORM, como por exemplo o EntityFramework (no meu caso eu uso o Xpo da DevExpress) ou qualquer outro para facilitar o acesso aos dados e também para tornar tudo mais orientado a objetos.
Com o MVP você vai ter essas 3 camadas para cada página ou webusercontrol do programa, fica tudo bem organizado e se fizer direitinho fica muito bom para se dar manutenção, principalmente tentando separar tudo que puder em webusercontrols para manter a responsabilidade de cada parte do programa no minimo possÃvel.
Ocelot, esse MVP parece muito com o padrao MVC, tem alguma diferença entre eles?
São bem parecidos mesmo, me parece que um veio do outro, não me lembro exatamente qual veio de qual, mas a diferença é basicamente como ocorre a comunicação entre as camadas, no MVP o Presenter não sabe quem é o View, ele precisa apenas de uma interface com as declarações dos métodos e eventos que ele vai usar, qualquer página que implementar esta interface pode usar este Presenter, no MVC me parece que o Controller e o View devem se conhecer para poderem trabalhar juntos.
Ainda existe também o Supervising Controller e o Passive View, onde no primeiro o Controller/Presenter contém a lógica mas o próprio View pode acessar o Model para buscar informações basicas, geralmente usando Binding, já no Passive View ela não faz nada, o Controller/Presenter é que cuida de tudo inclusive de passar os dados que o View deve exibir.
A maior diferença entre se usar um ou outro acho que vai ser mesmo no framework utilizado, pois por exempo o ASP.Net MVC muda completamente a forma de se programar para o ASP.Net, não utilizando nem mesmo os WebForms, já no caso do WebformsMVP ele é um framework MVP feito para se usar com os WebForms
Ainda existe também o Supervising Controller e o Passive View, onde no primeiro o Controller/Presenter contém a lógica mas o próprio View pode acessar o Model para buscar informações basicas, geralmente usando Binding, já no Passive View ela não faz nada, o Controller/Presenter é que cuida de tudo inclusive de passar os dados que o View deve exibir.
A maior diferença entre se usar um ou outro acho que vai ser mesmo no framework utilizado, pois por exempo o ASP.Net MVC muda completamente a forma de se programar para o ASP.Net, não utilizando nem mesmo os WebForms, já no caso do WebformsMVP ele é um framework MVP feito para se usar com os WebForms
valeu Ocelot, deu pra ter uma boa ideia. Inclusive vou até dar uma pesquisada sobre o assunto.
Agora sobre o que o Kerplunk estava dizendo, vc saberia me explicar em que camada entra as entidades, na BLL ou na Dto?
agradeço a todos pelas postagens. vlw
Agora sobre o que o Kerplunk estava dizendo, vc saberia me explicar em que camada entra as entidades, na BLL ou na Dto?
agradeço a todos pelas postagens. vlw
Tópico encerrado , respostas não são mais permitidas