Array
(
)

O que meus métodos da DAL devem retornar?

Gustavo Marcon
   - 03 set 2010

Olá a todos.

  Pessoal, estou desenvolvendo em C# com Windows Forms utilizando o conceito de MVC, mas estou enfrentando uma dúvida referente ao o que meus métodos de busca devem retornar.   Digamos que eu tenho uma grid no meu form e quero poder preenche-lo chamando um método da minha camada DAL (ou DAO). Digamos que esta grid deve ser populada com uma lista de Clientes.   Eu poderia executar a query e devolver um DataTable já populado para minha grid fazendo grid.DataSource = dal.metodoQueDevolveDataTable(); ou eu poderia devolver uma lista de objetos Cliente.. (  List<Cliente>() ).   Ao meu ver, como estou desenvolvendo em 3 camadas, acho que o mais correto é sempre trabalhar somente com meus objetos, não sair recebendo ou devolvendo nos meus métodos tipos como DataSet ou DataTable.   Porém, usando DataSet e DataTable eu tenho a vantagem de conseguir relacionar os DataTable, trabalhar com os dados em memória, etc... ( Como se fosse um ClientDataSet do Delphi ).   Se tiver alguma forma (prática) de receber um List<Cliente> e atribuir para um DataTable que está vinculado a um DataSet do meu form, e eu trabalhar em tela com o DataTable seria uma solução para o meu problema.   Não sei se consegui me explicar bem. Qualquer dúvida só perguntar.   Obrigado !

Vinicius Mesquita
   - 03 set 2010

Boas,   Não vejo problema algum do jeito que você pretende "bindar" o seu GridView, de qualquer jeito você criará uma espécie de "dependência" das camadas, eu criaria um objeto na controller que receberia um DataSet/DataTable já mapeados e na View teria um ObjectDataSource vinculado ao meu GridView, setando no controller o dado recebido da Model. Creio que não existe "certos" e "errados" para se solucionar um problema. Existe sim, vantagens e desvantagens( Essa é minha opinião, OK?).
Sugiro que você de uma olhada neste artigo bem interessante que aborda exatamente o tema que você procura esclarecer: http://msdn.microsoft.com/en-us/library/Ee817644(pandp.10).aspx

Espero ter ajudado.