Desenvolvimento orientado a que?

Existe um grande hype em torno de testes automatizados. E há motivos para isto, pois este busca resolver com excelência problemas como: aplicações que não estão 100% de acordo com o que foi combinado, manutenções sem garantia de funcionamento do legado, dores de cabeça com o cliente, entre outros. Mas, quando se usa a cultura de testes automatizados, com o tempo aparecem novos benefícios que antes pareciam ocultos, mas aos poucos começam a se revelar. Testes automatizados nos obrigam a desacoplar classes, consequentemente, isolando-as de responsabilidades que não deveriam ter, aplicando o princípio da responsabilidade única .

Por exemplo, ao criar a classe FornecedorDAO, como é mostrada no exemplo abaixo, esta possui unicamente a responsabilidade de recuperar e persistir objetos referentes ao fornecedor. Não é responsabilidade desta classe criar sessões com o banco, por isso, esta já recebe a sessão em seu construtor, obrigando o chamador a aplicar suas dependências. uma melhor abordagem sobre isto é apresentado pelo pessoal da Caelum aqui

public class FornecedorDAO {

private EntityManager entityManager;

public FornecedorDAO(EntityManager entityManager) {
this.entityManager = entityManager;
}

//metodos dao

}

Pode não parecer tão intuitivo no começo, mas no andamento de um projeto, depois de várias classes, as dores de cabeça poderão  aparecer. Entre as mais comuns, estão a dificuldade de manutenção e a falta de flexibilidade no código. Dificuldade na manutenção está vinculado a claras violações do princípio OCP. Dias atrás apresentei um pequeno projeto aplicando estes princípios, e, para criar uma nova tela MVC, não foi necessário alterar nenhuma classe além do menu. Flexibilidade, ao meu ver, não é o sistema prever todas as possíveis manutenções do futuro (na verdade não deve tentar prever nenhuma), mas possuir um design flexível o suficiente que não gere pesadelos para o bolso do cliente na hora da manutenção.

About CarlosEduardoXP

Especialista em desenvolvimento de Sistemas Distribuídos, sempre aplicando boas práticas e padrões difundidos na comunidade. Auto didata, fanático por refatoração e performance, sempre buscando reutilização e testes automatizados cada vez mais eficazes.
This entry was posted in Software Development. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s