Uma versão mais avançada não é uma versão melhor.
O mesmo app, em 28 versões. A qualidade do código sobe quase o caminho todo. A facilidade para o agente, não: ela chega ao máximo na família 6 e cai na família 7, onde o código ganha bancos separados e fronteiras que o agente precisa atravessar.
Role para os lados para comparar todas as branches. As tabelas abaixo têm os mesmos dados.
7D: maior Rubycritic, 94,55, mas 19/25 para agentes
6G: melhor nota para agentes, 24/25
Explore por família
Nas tabelas, role na horizontal para comparar todas as colunas.
Famílias 1 e 2: arquitetura de controllers
Família 3: estrutura de domínio
Branch
Regra
LOC
Rubycritic
Agente
3A-namespaced-controllers
O prefixo vira pasta.
1.390
84,71
14 /25
3B-nested-namespaces
Se o prefixo sobreviveu ao namespace, o namespace não é fundo o bastante.
1.390
84,71
15 /25
3C-context-views
Domínio no caminho, recurso no nome.
1.390
84,71
16 /25
3D-context-mailers
Declare o caminho; não deixe o Rails adivinhar pelo nome da classe.
1.390
84,71
17 /25
3E-singular-resources
Expresse toda rota como declaração de recurso.
1.389
84,41
16 /25
3F-resource-discipline
Corrija o nome, não a rota.
1.397
83,92
20 /25
3G-domain-naming
Nomeie a operação, não a página.
1.417
83,22
21 /25
Família 4: separação de pontos de entrada
Família 5: autoridade do model
Branch
Regra
LOC
Rubycritic
Agente
5A-fat-models
Se dois controllers calculam a mesma coisa, o model calcula uma vez.
1.640
91,51
17 /25
5B-model-callbacks
Se todo caminho de criação dispara o efeito, o evento é do model.
1.638
91,23
18 /25
5C-unified-vocabulary
O nome do model acompanha o namespace do controller.
1.641
91,18
21 /25
5D-model-authority
Pergunte ao model dono do dado; não atravesse as associações dele.
1.646
91,21
23 /25
Família 6: nomes de domínio
Branch
Regra
LOC
Rubycritic
Agente
6A-member-object
Quando um conceito cresce além da infraestrutura, dê a ele classe e nome.
1.696
91,36
19 /25
6B-token-secret
Funções puras junto com persistência precisam de casa própria.
1.712
91,46
22 /25
6C-task-status
Se o código fala uma palavra em vários lugares, dê a ela uma casa canônica.
1.717
91,45
19 /25
6D-query-objects
Quando um cálculo cresce além do model, dê a ele um objeto próprio.
1.735
91,58
21 /25
6E-declared-authority
Se o dado é seu, responder sobre ele é responsabilidade sua.
1.717
91,72
22 /25
6F-contextual-names
Se o namespace já diz, o nome dispensa o prefixo.
1.717
91,72
19 /25
6G-named-orchestrations
Coordenação entre vários models ganha nome próprio.
1.799
92,08
24 /25
Família 7: contextos delimitados e isolamento
Branch
Regra
LOC
Rubycritic
Agente
7A-domain-boundaries
Nenhum model referencia classes de outro domínio.
1.785
93,80
19 /25
7B-process-managers
Quando estado intermediário se acumula entre fases, a orquestração ganha objeto próprio.
1.793
93,67
19 /25
7C-domain-databases
Cada contexto delimitado tem seu próprio banco.
1.818
93,81
17 /25
7D-shared-kernel
O app host guarda só o que as duas interfaces compartilham. O resto vai para uma engine.
1.832
94,55
19 /25