[Artigo] Agenda em ASP.NET/C# com NHibernate [Parte 4.3 - Criando a Camada de Transporte - Classe User.cs]

Introdução

Neste artigo, iremos um pouco mais a fundo e teremos algumas modificações em relações as classes anteriores. Como podemos notar, um usuário poderá ter vários telefones e vários endereços, o que ocasiona a utilização de lista de objetos.

Entendendo Listas e Generics

Antes de começar a criar os fields, devemos entender a questão da Listas e dos tipos genéricos no .NET.

Na nossa regra de negócios, definimos que o usuário poderá ter N telefones e N endereços. Então vem a seguinte solução, criar um array de strings contendo os telefones e outro array para o endereço, certo? Errado!

O mais sensato a se fazer neste caso é criar uma lista de objetos do tipo Telefone e Endereço. No .NET Framework 2.0, foram incluidos os tipos genéricos e listas que facilitam este uso.

Depois de criadas as listas de telefones e endereços, na nossa camada de acesso a dados, utilizaremos de uma técnica chamada Lazy Load para preencher todos os telefones e endereços do usuário automaticamente quando preenchermos um usuário.

Deste modo, temos uma lista encadeada, onde dentro do objeto usuário nós temos uma lista de telefones, e se ouvesse necessidade, dentro de um telefone da lista de telefones poderia haver outra lista encadeada, e assim por diante.

A sintaxe para a criação de listas genéricas é simples:

List<T> – Onde T é o tipo genérico.

Sendo assim, substituiremos T pelo tipo dos nossos objetos (Phone e Address).

Quando utilizamos listas genéricas, temos muita facilidade para adicionar, remover ou ordenar items na mesma.

Criando os Fields

Na figura abaixo eu destaquei a criação das listas em amarelo. Para utilizar o List<T> é necessário importar o namespace System.Collections.Generic.

Criando os Properties

A mesma situação dos fields se aplicam na criação das properties.

Criando os Constructors

Note que temos dois parâmetros do tipo List, ou seja, ao carregar um usuário, já devemos informar sua lista de telefones e endereços.

Após obter estas listas, tudo que devemos fazer é atribuir seu valor às variáves criadas na region fields. Ao contrário do que alguns pensam, não precisamos fazer um loop pela lista atribuindo cada item para a variável lista que temos.

Sobrescrevendo o método ToString()

Download do Código Fonte

http://www.insidedotnet.com.br/andrebaltieri/Downloads/Empresa.Agenda.4.3.zip

Conclusão

As listas genéricas nos ajudam muito na questão da organização e armazenamento de dados. Mais adiante poderemos ver quão úteis e entender melhor o por que da utilização destas.

Até o próximo artigo =)

10 Comments to “[Artigo] Agenda em ASP.NET/C# com NHibernate [Parte 4.3 - Criando a Camada de Transporte - Classe User.cs]”

  1. Josué Teixeira 16 novembro 2009 at 12:32 #

    Parabéns André. Como sempre, bem didatico.

    Só uma dúvida… Quando a propriedade lazy load estiver true , significa que independente de eu não chamar nenhuma propriedade da lista agregada, mesmo assim ele será preenchido ?

    Valeu!

  2. André Baltieri 16 novembro 2009 at 21:44 #

    Josué, primeiramente obrigado pelo comentário.
    Vamos lá… Quando utilizamos Lazy Loading, significa que um certo nível de objetos encadeados serão preenchidos. Por exemplo.
    Temos os Clientes e seus dependentes. Com o Lazy Loading quando carregarmos os clientes, seus dependentes serão automaticamente carregados. Além disso ainda podemos dizer quantos níveis serão afetados, como por exemplo Pai > Filho > Neto e assim por diante. Talvez isto seja um pouco confuso agora, mas nos próximos artigos será abordado. Se tiver mais dúvidas por favor, não hesite em perguntar.

    Abraços!

  3. Gleison Pereira 3 dezembro 2009 at 13:26 #

    Boa tarde André tudo blz, quando virá o post do artigo?

    Grato!

  4. André Baltieri 3 dezembro 2009 at 13:54 #

    @Gleison Pereira
    Olá Gleison, fico feliz pela expectativa. Infelizmente, este fim de semestre está me matando, estou sem tempo. Esta semana eu ia publicar mais um artigo desta séries, mas infelizmente tenho prova todos os dias. Na semana que vem já vem coisa nova. Aguarde!

    Obrigado pelo comentário e abraços!

  5. Gleison Pereira 3 dezembro 2009 at 15:16 #

    Normal, também estudo e sei que é correria, rs.

    Aguardarei prontamente os proximos posts pois estou muito interessado na parte de NHibernate.

    Abraços

  6. Robson de Almeida 13 janeiro 2010 at 9:51 #

    André,

    Muito boa esta série de artigos. Pretendes dar continuidade? Estou ansioso para ver a continuidade.

    Parabéns!

  7. André Baltieri 13 janeiro 2010 at 22:38 #

    Obrigado Robson… Fico feliz que esteja atingindo meu objetivo. NEste exato momento estou escrevendo a parte 5.1, só sobre mapeamento.. COmo está um pouco extensa e teórica, tenho que revisar e ver se a didatica está realmente boa, mas aguarde em breve. Abrção.

  8. Alexandre 20 janeiro 2010 at 7:59 #

    André,

    Parabéns pela série de artigos. Também estou ancioso pelos próximos.

    Abraço

  9. André Baltieri 20 janeiro 2010 at 8:39 #

    Obrigado Alexandre. Abraços!

  10. Francisco 12 março 2010 at 9:40 #

    Em primeiro lugar Parabéns, tb escrevo artigos e sei que não é nada fácil. Você pretende dar continuação sobre o NHibernate ? muito boa sua didatica. Estou aguardando o próximo. Abraços !


Leave a Reply