7 de maio de 2008

Mapeamento de Objeto Relacional e Segurança de Aplicações WEB

Ultimamente tenho mexido bastante com frameworks que utilizam de ORM (Object-Relational Mapping) como, Rails (framework para linguagem Ruby) e Cake-php (port do Rails para php).

Eu tinha um certo ceticismo sobre estes frameworks que fazem muita coisa por baixo dos panos, mas ao mexer um pouco mais e entender melhor, cheguei a conclusão que eles não limitam/amarram em nada o desenvolvimento das aplicações e que a maior abstração é referente a manipulação dos dados do banco de dados.

E analisando um pouco mais, cheguei a conclusão que ORM pode colaborar e muito com a segurança das aplicações WEB. Um problema sério no desenvolvimento WEB são os famosos Injection Flaws (Cross Site Scripting, SQL Injection) e isso é devido o despreparo de muitos desenvolvedores que acabam manipulando dados nas aplicações como um chipanzé autista. Quem nunca viu aquelas concatenações horríveis de strings SQL?

Quando estes desenvolvedores despreparados usam ORM eles estão trazendo menos riscos a suas aplicações, pois o ORM faz tudo para eles.

Mas o que é ORM?

ORM é uma biblioteca que transforma dados de bancos relacionais em classes de manipulação de dados de maneira transparente ao usuário. Além de preservar as características de orientação a objetos, o desenvolvedor não precisa fazer nenhuma Query, String de conexão, tudo é feito pelo framework de ORM.

Existem frameworks de ORM para diversas linguagems como, Java (Hibernate, Cayenne), .Net (NHibernate), além dos já citados.

Um problema dos ORM é o volume de dados gerados, em alguns casos a performance é bastante prejudicada. Mas a coisa vem mudando, o Rails por exemplo implementou uma mudança que elimina muito o volume de dados em cada consulta ao banco.

ORM é um tema bem interessante, quem quiser saber mais consulte: Mapping Objects to Relational Databases: O/R Mapping In Detail

Um comentário:

Marcelo M. Fleury disse...

Bem comentado Wagner... gostaria de acrescentar o symfony como boa opção de framework php... utiliza o propel(PDO ou creole) ou doctrine(PDO) para orm, abraços!