Purismo

Qual é o limite entre a utilização dos recursos que lhe estão disponíveis, seguir paradigmas, conceitos e idéias e o purismo puro e simples? É possível traçar uma linha imaginária clara entre um e outro?

Eu acredito que não.

Não que eu queira — ou me julgue adequado — para definir tal fronteira, mas levando em consideração que até modelo de maturidade já foi proposto para Rails, essa pergunta tem transitado na minha cabeça e buzinou mais alto hoje.

Percorrendo pelo código de uma das nossas aplicações, encontrei uma migration para adicionar um índice a uma tabela. Removendo nomes de tabela e coluna, ela é exatamente assim:

def self.up
  execute "ALTER TABLE `tabela` ADD UNIQUE `nome_indice` (`coluna`)"
end

def self.down
  execute "ALTER TABLE `tabela` DROP INDEX `nome_indice`"
end   

Funciona, sem sombra de dúvidas. E é legível. Não se trata de um código macarrônico e sequer diria que se trata de um exemplo de ASP em Rails.

Por outro lado, a mesma migration poderia ser escrita assim:

def self.up
  add_index :tabela, :coluna, :unique => true, :name => 'nome_indice'
end

def self.down
  remove_index :tabela, :name => :nome_indice
end

Igualmente legível e funcional. Usa as facilidades do ActiveRecord, ao invés de simplesmente executar um fragmento SQL. Na prática, o efeito é absolutamente o mesmo.

Para efeitos de discussão sobre pragmatismo e purismo, o exemplo é muito ruim. Propositalmente muito ruim. É ruim porque é, claramente, um border case.

É — ou deveria ser — absolutamente óbvio ululante que utilizar um framework MVC, com um ótimo ORM embutido e ainda assim não ter um único modelo, usar apenas find_by_sql direto nos controllers e ter lógica nas views é um caso claro de escrever ASP em Rails.

Assim como infligir custos enormes a uma aplicação só para se manter “semanticamente correto” ou 100% fiel a qualquer definição acadêmica ou paradigma estabelecido.

Mas, e se sairmos dos extremos? Pior, e se nós nos aproximassemos perigosamente do ponto de encontro entre ambas as linhas de raciocínio?

Seria leviano da minha parte simplesmente rotular o primeiro como macarrônico e o segundo como a pureza da forma e do conteúdo.

Se fizermos o exercício mental de sair do universo Rails e pensar em desenvolvimento de software, a vasta maioria conhece mais SQL do que Rails, então poderíamos dizer que a primeira forma é até mais legível, até o execute me parece estupidamente óbvio naquele contexto.

A segunda, por sua vez, é elegante e clara, principalmente para um rubista. Mesmo alguém iniciante só precisaria de uma rápida olhadela na documentação seria suficiente para decifrar o add_index e o remove_index.

Subjetivamente, pode ser bem mais fácil escolher, mas critérios objetivos, nenhuma é melhor.

O exemplo é ruim até para isso, definir um critério objetivo claro, mensurável, para chegar a uma única e final solução de qual o caminho correto (strictu sensu) a seguir.

Ao meditar um pouco no assunto e sobre exemplo, decidi aceitar que sempre haverá uma zona neutra nessa discussão. Sempre haverão casos-limite onde nenhum argumento estabelecido será suficientemente forte.

Sempre que cair em um caso desses, pretendo deixar minha opinião a cargo do bom senso.


LSDR.net

© 2004 - 09, Luiz Rocha

Todo conteúdo sob licenca Creative Commons by-sa, a não ser que explicitado.

As opiniões expressas nesse website não representam necessariamente a visão estratégica, as opiniões e posições do meu empregador, nem são endossadas pelo mesmo.

Caveat Lector