CAMADAS

JABA 21/06/2012 15:21:03
#404644
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
KERPLUNK 21/06/2012 17:25:10
#404646
Resposta escolhida
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.
JABA 21/06/2012 17:45:10
#404647
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?
KERPLUNK 21/06/2012 17:51:30
#404648
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.
JABA 21/06/2012 18:12:47
#404651
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?
KERPLUNK 21/06/2012 18:40:15
#404653
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...
JABA 21/06/2012 19:08:52
#404656
ok. Mas onde ficam essas entidades, na DTO ou na BLL mesmo?

só falta isso para mim entender.
OCELOT 21/06/2012 19:48:57
#404657
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.
JABA 21/06/2012 19:58:59
#404658
Ocelot, esse MVP parece muito com o padrao MVC, tem alguma diferença entre eles?

OCELOT 21/06/2012 20:56:17
#404664
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
JABA 21/06/2012 21:33:34
#404666
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
Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas