Saga do programador

5May/109

Idéias sobre encapsulamento, linq e delegates em C#

Atualmente estou trabalhando em projeto .Net. É a primeira vez que utilizo a plataforma profissionalmente e não dá para negar o quanto a .Net está interessante. Estou bastante impressionado com a linguagem C#. Apesar de todos os recursos interesantes da linguagem, tenho percebido que está acontecendo uma espécie de “relaxamento” em relação as boas práticas, principalmente de orientação a objetos. Umas coisas que mais tenho notado é a falta de preocupação com o encapsulamento, principalmente quando se usa  delegates e linq.

Neste post vou analisar alguns pontos relacionados a encapsulamento e o uso do Linq.

Vamos começar a analisar um modelo de objetos simples:

15Oct/097

Esse código que acabei de escrever está bom?

No inicio do aprendizado da linguagem Java, tudo é dificil. Não conseguimos nem mesmo converter um string em um numero ou vice e versa. Pra superar estas dificuldades recorremos a livros, apostilas, fóruns, blogs ou cursos.

Depois de ler livros, ou fazer cursos, essas "dificuldades operacionais" desaparecem, afinal aprendemos a usar melhor a linguagem e passamos a conhecer melhor suas apis. Nesse ponto já somos capazes de por exemplo converter um String em um numero, criar e organizar listas de elementos, usar arquivos para realizar operações de leitura e escrita.

21Jul/098

Nosso modelo de objetos não deve ser uma cópia do nosso modelo de dados

Esta semana aconteceu uma discussão bem interessante na lista interna da Caelum sobre Active Records. E no meio desta discussão surgiu o seguinte tema: "Nosso modelo de objetos não deve ser uma cópia do modelo de dados."

Acho que isso a maioria das pessoas já sabia, mas o que tenho visto por aí em projetos que trabalhei é exatamente o contrário: um modelo de objetos exatamente igual ao modelo de dados.

Por que ainda utilizamos uma abordagem assim?
Em minha opinião, o principal problema é que muitos desenvolvedores ainda não entenderam corretamente Orientação a Objetos. A prova disso são os sistemas escritos de forma totalmente procedural.

Tentarei exemplificar algumas destas diferenças. Este exemplo é uma adaptação de um problema real que eu presenciei. Vamos imaginar um sistema de cursos onde nós temos as tabelas: