14 de dezembro de 2011, por Denis Ferrari em Design, Herocast, Tecnologias

Fala Pessoal, tudo bom? O Herocast dessa semana aborda um tema muito bacana: A tradução de um modelo uml em código e seu respectivo mapeamento utilizando o Fluent NHibernate. O Objetivo é apresentar uma visão geral sobre os dois temas, dar algumas dicas e simplificar conceitos que parecem complicados de início. Espero que gostem!

Diagrama de classes pelo mestre Macoratti

FluentNHibernate.org

Diagrama utilizado

Classe Comentário

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class Comentario
{
	public int Id { get; set; }
 
	public string Nome { get; set; }
 
	public string Email { get; set; }
 
	public string Mensagem { get; set; }
 
	public Conteudo Conteudo { get; set; }
}
 
public class ComentarioMap : ClassMap<Comentario>
{
	public ComentarioMap()
	{
		// Chave primária.
		Id(m => m.Id); 
 
		Map(m => m.Nome)
			// Campo obrigatório.
			.Not.Nullable(); 
 
		Map(m => m.Email)
			.Not.Nullable();
 
		Map(m => m.Mensagem)
			.Not.Nullable()
			// Comprimento do campo.
			.Length(2000); 
 
		// Lado 1 do mapeamento 1xN.
		References(m => m.Conteudo);
	}
}

Classe Autor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Autor
{
	public int Id { get; set; }
 
	public string Nome { get; set; }
 
	public IList<Conteudo> Conteudos { get; set; }
 
	public Autor()
	{
		this.Conteudos = new List<Conteudo>();
	}
}
 
public class AutorMap : ClassMap<Autor>
{
	public AutorMap()
	{
		Id(m => m.Id);
 
		Map(m => m.Nome)
			.Not.Nullable();
 
		// Lado N do mapeamento 1xN.
		HasMany(m => m.Conteudos);
	}
}

Classe Categoria

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Categoria
{
	public string Id { get; set; }
 
	public string Nome { get; set; }
 
	public string Descricao { get; set; }
 
	public IList<Conteudo> Conteudos { get; set; }
 
	public Categoria()
	{
		this.Conteudos = new List<Conteudo>();
	}
}
 
public class CategoriaMap : ClassMap<Categoria>
{
	public CategoriaMap()
	{
		Id(m => m.Id);
 
		Map(m => m.Nome)
			.Not.Nullable();
 
		Map(m => m.Descricao);
 
		// Mapeamento NxN.
		HasManyToMany(m => m.Conteudos);
	}
}

Classe Conteúdo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class Conteudo
{
	public int Id { get; set; }
 
	public string Titulo { get; set; }
 
	public string Corpo { get; set; }
 
	public Status Status { get; set; }
 
	public IList<Categoria> Categorias { get; set; }
 
	public Autor Autor { get; set; }
 
	public IList<Comentario> Comentarios { get; set; }
 
	public Conteudo()
	{
		this.Categorias = new List<Categoria>();
		this.Comentarios = new List<Comentario>();
	}
}
 
public class ConteudoMap : ClassMap<Conteudo>
{
	public ConteudoMap()
	{
		Id(m => m.Id);
 
		Map(m => m.Titulo)
			.Not.Nullable();
 
		Map(m => m.Corpo);
 
		Map(m => m.Status);
 
		References(m => m.Autor)
			// Não realiza alterações na referência.
			.Cascade.None();
 
		HasManyToMany(m => m.Categorias)
			// Pode criar e atualizar as referências.
			.Cascade.SaveUpdate();
 
		HasMany(m => m.Comentarios)
			// Controle total sobre as referências, inclusive exclusões.
			.Cascade.All();
	}
}

Classe Notícia

1
2
3
4
5
6
7
8
9
10
public class Noticia : Conteudo
{
 
}
 
// SubclassMap representa a herança.
public class NoticiaMap : SubclassMap<Noticia>
{
 
}

Se gostou do vídeo, ajude a divulgar! :)

Abraços!


Comentários:
3 Comentários postados em "HeroCast 08 – Uml e Fluent NHibernate"
Victor on dezembro 15th, 2011 at 11:05 #

Muito Bom mano.
Show de bola.


Roberto Cesar Rodrigues on dezembro 18th, 2011 at 21:42 #

Cara esse seu post (assim como os outros) foram de extrema utilidade, mas esse Você acertou em cheio. Parabéns e muito obridado!


Rodrigo Ferro on janeiro 1st, 2012 at 11:29 #

Parabens, ficou claro e objetivo.. Excelente conteudo ! Continue assim !


Deixe um comentário

Nome: 
Email: 
URL: 
Comentário: