Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
De tempos em tempos, ao analisar arquiteturas propostas, percebo a dificuldade que ainda temos no design de classes e camadas. Na minha vivência os problemas mais comuns parecem sempre estar relacionados com a baixa coesão . Parece que existe um desuso de variáveis globais ou estáticas, diminuindo o também comum problema do alto acoplamento .
Aqui vão dois truques que costumo usar para melhorar a coesão no design de um software:
1. Se você está usando a OO, use a teoria de tipos ( data type e abstract data type ). Vou voltar a falar sobre este assunto num futuro, mas minha lista do por que usá-la é:
a. Dados e métodos devem andar juntos – caso contrário o espalhamento será natural e, com ele, vai-se embora a coesão;
b. Heranças ficam bem estruturadas, aumentando o poder do uso do polimorfismo (dica: sempre que for necessário o uso de um switch/case desconfie – talvez seja falta de herança);
2. Faça uma análise de coesão. É relativamente simples, principalmente com ferramentas de apoio. Siga os passos:
a. Faça uma matriz entre as unidades que você quer analisar. Exemplo: coloque nas linhas as ações/métodos e nas colunas as tabelas do banco de dados. Outro exemplo: coloque métodos/funções nas linhas e colunas para analisar quem chama quem;
b. Coloque um X na célula em que há dependência (ex.: uso ou chamadas). Você vai conseguir uma matriz cheia de pontos distribuídos de forma irregular e provavelmente esparsa;
c. Mude linhas e colunas de lugar de modo a que tenhamos o maior número de X’s lado a lado. Ao final, as regiões escuras são excelentes candidatos para a coesão (classes, classes inter-relacionadas, patterns ou camadas);
O mais interessante é que, na minha experiência, o uso de 1) leva a uma excelente matriz em 2) .
Minhas interpretações deste fato:
1. A teoria de tipos é boa;
2. Se entendermos o que fazemos costumeiramente o fazemos melhor :)