IGTI Blog

Como definir a forma de desenvolvimento na plataforma .NET

No nosso post vamos discutir as formas de trabalho que você ou sua equipe podem ter para desenvolver softwares no .NET. Basicamente iremos discutir, quando realmente eu devo utilizar Model First, DataBase First ou Code First?

Durante vários anos, os desenvolvedores não tinham uma boa impressão do Entity Framework, preferindo em muitos casos utilizar outros ORM como o NHibernate. Porém o número considerável de desenvolvedores que preferem hoje (ou só conhecem) o Entity Framework aumentou, pelo fato justamente da ferramenta está bastante consolidada. Na versão 4.1 do .NET Framework foi introduzido o famoso Code First, e com isso surgiram algumas dúvidas de quando e como utilizar essa forma de desenvolver.

Code First

Podemos definir essa abordagem como a mais voltada para o desenvolvedor, em que o desenvolvedor pode simplesmente se preocupar com suas classes, e até mesmo “esquecer” do banco de dados que a aplicação vai utilizar. Nessa técnica o desenvolvedor cria suas classes, o framework gera as tabelas, os campos, relacionamento entre as tabelas geradas etc., as restrições e anotações nas propriedades nas classes de domínio será também refletida na base de dados e finalmente o framework gera o esquema da base de dados todo sem que o desenvolvedor execute (ou até mesmo saiba) dos comandos gerados na base de dados.  

Outro item que deve ser considerado em utilizar essa técnica é a possibilidade de trabalhar com “Migrations”, que vai permitir que você crie versões do banco de dados. Para muitos é o item que faz com que essa técnica seja “a melhor”, pelo fato de que seu código e o banco de dados andarem juntos, fazendo também que ocorra o versionamento, onde as alterações para inclusão e exclusão na base de dados ficam armazenadas no código gerado que será refletido na base de dados, ou seja, você vai poder visualizar o que irá ser alterado em cada versão do banco de dados, e caso necessite, voltar o banco de dados para uma determinada versão.

 Database First

Em contrapartida, na abordagem DataBase First o desenvolvimento ocorre primeiramente no banco de dados, ou seja, criando as tabelas, seus relacionamentos, restrições em alguma ferramenta e o framework extrai o esquema do banco de dados e cria as classes para o desenvolvedor.

Em empresas que possuem DBAs responsáveis pelo banco de dados, essa abordagem acaba sendo indicada, pelo fato de que as alterações no banco devem ser refletidas no código das classes, e não o inverso.  Uma desvantagem é que o desenvolvedor acaba tendo que esperar as alterações no banco para promover/entregar o seu código.

 Model First

No Model First você pode criar os relacionamentos, entidades etc., sendo que essa etapa pode ser colocada como um passo anterior ao Database First, criando um modelo conceitual da base, para que depois possa ser refletida (caso queira) na geração do banco de dados.

 Mas o que os desenvolvedores preferem?

 Se realizarmos somente uma discussão entre DataBase First e Code First, é possível encontrar os que defendem a abordagem Database First, sendo que alguns preferem utilizar Code First para projetos pessoais ou até mesmo projetos pequenos, devido a fatores como, ter um controle maior sobre o banco de dados, questões de segurança no BD, em alguns casos, atribuir a responsabilidade do banco a DBAs, e caso já tenha um banco existente, simplesmente seguir alterando qualquer estrutura das tabelas no banco.

Para os que acreditam que o Code First seja a melhor opção, apontam o versionamento do banco, manter a sincronia entre o código e o banco de dados e não deixar a criação das classes por conta do framework, fatores que fazem o Code First a melhor escolha.

Se especializar na plataforma vai fazer com que alguns “mitos” possam basear nossas decisões, ou seja, buscar informações e se, como que Code First é bom somente para projetos novos, Database First para projetos grandes etc. No meu dia-a-dia prefiro utilizar Code First, tanto para projetos pequenos/novos ou até mesmo projetos grandes/legados.  

Dois dos principais fatores que me levam a escolher Code First são:

  1.  Controle do que foi alterado em cada versão do banco de dados, tenho a preocupação somente em desenvolver minhas classes e saber que isso será refletido na base de dados.
  2. Não me preocupar com os comandos que serão executados na base, tendo que somente ter como preocupação as definições das minhas classes

O gráfico abaixo pode nos ajudar a tomar essa decisão:

 

 

E aí, qual é sua forma de desenvolver? E quais dessas abordagens você mais trabalhou?

Professor autor: Aniceto Andrade