Facilita a manutenção: o modelo disponibilizado pelos ORMs facilita e muito a manutenção da aplicação, pois a manipulação das operações se dá através de
código já conhecido (objetos e seus respectivos métodos);
Código elegante: o fato de o modelo mesclado de sentenças SQL e chamadas de métodos de objetos dar lugar a um código mais legível e semântico torna o
código fonte da aplicação mais elegante.
Para justificar as afirmações apresentadas na lista anterior, utilizaremos exemplos práticos. Imagine, por exemplo, que precisamos adicionar um novo cliente
na tabela fictícia de Clientes. Se optarmos pela utilização das classes nativas da plataforma .NET (ADO), poderíamos ter um trecho de código semelhante ao
apresentado pela listagem 2.
Listagem 4.2 - Conectando ao banco de dados e adicionado um novo cliente
via ADO:
string stringDeConexao =
"string para conexão com o banco de dados aqui";
45
4.2. Abordagens para a criação de Models
Casa do Código
SqlConnection objetoDeConexao = new SqlConnection(stringDeConexao);
SqlCommand objetoDeComando = objetoDeConexao.CreateCommand();
string sql = "INSERT INTO Clientes (NomeCompleto, Email)
values (@NomeCompleto, @Email)";
objetoDeComando.CommandText = sql;
objetoDeComando.CommandType = CommandType.Text;
objetoDeComando.Parameters.Add("@NomeCompleto", NomeCompleto.Text);
objetoDeComando.Parameters.Add("@Email", Email.Text);
objetoDeComando.ExecuteNonQuery();
O código apresentado pela listagem 2, como é possível observar, é bastante simples, entretanto, extenso e verboso. Para realizar a mesma operação utilizando um ORM para .NET, poderíamos ter um trecho de código semelhante ao apresentado
pela listagem 3.
Listagem 4.3 - Conectando ao banco de dados e adicionando um cliente atra-
vés de um ORM:
Clientes.Add();
Clientes.NomeCompleto = NomeCompleto.Text;
Clientes.Email = Email.Text;
Clientes.Save();
Tanto a listagem 2 quanto a listagem 3 apresentam códigos que executam a
mesma operação: adicionar um novo cliente ao banco de dados. Não é difícil ob-
servar a diferença exorbitante entre as abordagens. Enquanto temos muito código na primeira, temos uma redução considerável na segunda. Enquanto temos muitos
objetos em ação na primeira abordagem, temos bem poucos na segunda.
É importante observar, entretanto, que mesmo possuindo as vantagens já men-
cionadas neste capítulo, existem alguns gargalos relacionados aos ORMs e que, portanto, devem ser cuidadosamente analisados para não impactar de forma crítica durante o ciclo de vida da aplicação. O principal aspecto a ser considerado olhando-se por este prisma é a performance. Mas não se preocupe, voltaremos a discutir sobre isso quando estivermos trabalhando com o model de nossa aplicação exemplo.
Existe um grande número de ORMs disponíveis no mercado para o trabalho
dentro da plataforma .NET. Você deverá analisar cuidadosamente cada opção para escolher aquele que
melhor atende às necessidades do projeto. Evidentemente, alguns deles se destacam por serem reconhecidamente robustos, com boa documenta-
46
Casa do Código
Capítulo 4. Models: Desenhando os modelos da nossa aplicação
ção disponível e, também, por possuírem suporte. Em função disso, são amplamente utilizados em projetos mundo afora.
Para a aplicação Cadê meu médico, utilizaremos o Entity Framework (EF), um ORM distribuído gratuitamente pela Microsoft e que tem sido amplamente utilizado em projetos .NET. Na ocasião em que este livro foi escrito, a versão estável mais atual do EF era a 4.0.
4.3
O Entity Framework
EF, como o próprio nome sugere, é um framework do tipo ORM que permite tratar e manipular dados como classes e objetos de domínio. Por ser desenvolvido, mantido e disponibilizado pela Microsoft, ele se integra de forma otimizada às tecnologias disponíveis na plataforma .NET com performance, segurança e robustez. Por ser esta integração nativa, desenvolvedores podem utilizar também de forma natural dois grandes recursos da .NET framework: LINQ e expressões Lambda para recuperar e
manipular os dados necessários à aplicação.
Você pode saber mais sobre o Entity Framework através do link:
http://bit.ly/mvc-ef
Código primeiro?
Uma das vantagens proporcionadas por boa parte dos ORMs e propositalmente
não mencionada nas seção anterior é a possibilidade de escolher a forma de trabalho do ORM. Isto é, vamos nos basear primeiro no banco de dados físico ou o banco
de dados que será gerado será um reflexo de nossa estrutura de classes? Nesta seção discutiremos um pouco sobre as diferenças, vantagens e desvantagens entre estas abordagens.
O famoso code first
Imagine poder criar uma estrutura bem definida de classes (Clientes, Usuários, Fornecedores etc.) cujos atributos e métodos (Codigo, Nome, Razão Social etc.) poderão atuar em um momento posterior, como estruturas primárias (tabelas, chaves primárias, estrangeiras etc.) na criação da estrutura física de banco de dados no servidor. Legal, não?
Esta é uma das características funcionais do Entity Framework e é conhecido