Tag Archives: mvc

ICSME 2016 – A Validated Set of Smells in Model-View-Controller Architectures

Maurício Aniche, Gabriele Bavota, Christoph Treude, Arie van Deursen, Marco Aurélio Gerosa
32nd IEEE International Conference on Software Maintenance and Evolution

Code smells are symptoms of poor design and implementation choices that may hinder code comprehension, and possibly increase change- and defect-proneness. A vast catalogue of smells has been defined in the literature, and it includes smells that can be found in any kind of system (e.g., God Classes), regardless of their architecture. On the other hand, software systems adopting specific architectures (e.g., the Model-View-Controller pattern) can be also affected by other types of poor practices.

We surveyed and interviewed 53 MVC developers to collect bad practices to avoid while working on Web MVC applications. Then, we followed an open coding procedure on the collected answers to define a catalogue of six Web MVC smells, namely \textsc{Smart Repository, Fat Repository, Promiscuous Controller, Smart Controller, Laborious Repository Method}, and \textsc{Meddling Service}. Then, we ran a study on 100 MVC projects to assess the impact of these smells on code change- and defect-proneness. In addition, we surveyed 21 developers to verify their perception of the defined smells. The achieved results show that the Web MVC smells (i) more often than not, increase change- and defect-proneness of classes, and (ii) are perceived by developers as severe problems.

Download the paper

Como começar a refatorar seu legado em PHP/ASP/JSP?

TL;DR: O primeiro passo na refatoração de arquivos de script é mover todo o código de acesso a banco de dados, regras de negócio existentes e fluxo para o topo do arquivo. Para isso, crie as variáveis que serão usados na parte de baixo. Em seguida, o HTML que contém código PHP apenas para regras de visualização.

Não é difícil encontrarmos aqueles arquivos de script imensos, em PHP, ASP ou JSP, misturando um pouco de tudo: HTML, lógica, acesso a dados, mais HTML, mais lógica, etc:

A pergunta é: Como começar a refatorar esse código? Muitos anos atrás, tive uma experiência bastante interessante com um sistema enorme escrito só em JSP. O primeiro passo que costumava fazer é fazer com que todo código JSP ficasse no começo do arquivo. Assim, toda lógica de negócio, acesso a banco de dados ficaria agrupado. O resto da página com HTML conteria scripts apenas para alguma lógica de visualização.

Veja o código anterior refatorado. Tanto rs quanto rs2 foram para cima. Criei a variável total também para deixar o código um pouco melhor.

Porque fiz isso? Para começar a separar as responsabilidades desse código. Colocar todo “controle de fluxo” em um único lugar, e regras de visualização em outro. Mesmo que estando no mesmo arquivo, a separação já é visível e facilita a manutenção. Sim, no fim, estou tentando separar o M, do V, do C.

Aqui, começamos a separar o C do V. O M (modelo) não existe nesse código! O próximo passo seria começar a criar classes de domínio e lidar com elas, ao invés de manipular diretamente o array que as funções de acesso a banco geralmente devolvem. Mas isso é assunto para um próximo post!

PS: rs e rs2 são péssimos nomes. Você, claro, escolha nomes que tenham a ver com o seu domínio.