5 dicas para um projeto Rails melhor

Publicado por Nando Sousa no dia dev

Rails é um framework web fantástico que nos permite entregar software com muita agilidade. Entretanto, é muito comum ver projetos saindo dos “trilhos” e se transformando em aplicações de alta complexidade, reduzindo consideravelmente a produtividade de seus mantenedores a curto, médio e longo prazo.

Neste artigo, separei 5 dicas que podem previnir futuras dores de cabeça, retrabalho e débitos técnicos.

1. Evite views gigantes

Passamos mais tempo lendo do que escrevendo código. Por isso devemos, sempre que possível, otimizar nosso processo de leitura.

É comum encontrar views com 200, 300 ou 500 linhas de código, mesmo que o Rails dê uma solução simples para isso. É possível usar partials dentro da view, componentizando o arquivo. Desta maneira, o propósito dentro da estrutura do projeto fica mais claro.

Por exemplo, o código abaixo não está otimizado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  <!-- app/views/checkout/index.html.erb -->
  ...
  <div class="address">
  ... 15 linhas
  </div> <!-- .address -->

  <div class="delivery">
  ... 20 linhas
  </div> <!-- .delivery -->

  <div class="summary">
  ... 50 linhas
  </div> <!-- .summary -->

  <div class="payment">
  ... 60 linhas
  </div> <!-- .payment -->
  ...

Para ficar mais compreensível, podemos deixá-lo assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
  <!-- app/views/checkout/index.html.erb -->

  <!-- app/views/checkout/_address.html.erb -->
  <%= render 'address', address: @customer.address %>

  <!-- app/views/checkout/_delivery.html.erb -->
  <%= render 'delivery' %>

  <!-- app/views/checkout/_summary.html.erb -->
  <%= render 'summary' %>

  <!-- app/views/checkout/_payment.html.erb -->
  <%= render 'payment' %>

2. Ambiente de testes “Timezone Independent”

Garanta que independente da timezone, sua aplicação continue funcionando corretamente. Utilize o snippet abaixo para configurar uma timezone aleatória toda vez que sua suite de testes rodar.

1
2
3
4
5
6
7
8
  # spec/support/random_timezone.rb

  RSpec.configure do |config|
    config.before(:suite) do
      Time.zone = ActiveSupport::TimeZone.all.sample
      puts "Randomized timezone: #{Time.zone}"
    end
  end

3. Sandi Metz Rules

A medida que o código cresce é mais difícil manter a simplicidade de uma aplicação Rails. Felizmente, a nossa querida Sandi Metz nos presentou com 4 regras que podem nos ajudar com este problema:

  1. Suas classes não podem ter mais de 100 linhas de código.
  2. Seus métodos não podem ter mais de 5 linhas de código.
  3. Você não pode passar mais que 4 parâmetros em um método, e não pode simplesmente transformá-los e uma hash gigante.
  4. Ao chamar um Rails Controller, você pode instanciar somente um objeto para fazer todo trabalho necessário. Sua view deve ter conhecimento de apenas uma variável de instância.

Você pode quebrar as regras desde que convença o seu pair a fazê-lo.

Com a gem Sandi Meter é possível fazer uma verificação no código encontrar por violações.

4. Siga boas práticas de design em sua API

Hoje em dia, com o advento do mobile e de uma internet mais integrada, ter um bom design de API REST é de grande importância para o sucesso do produto. O guia HTTP API design descreve uma série de boas práticas, tais como:

  • Requerer conexão segura.
  • Responder request com status codes apropriados.
  • Aceitar e responder com datas em UTC.

5. Evite o dogmatismo dentro do seu time

Dogma significa impor algo como verdade de forma inquestionável e absoluta. Ter esse tipo de atitude em um projeto Ruby, onde se é possível resolver um problema de diversas formas diferentes, pode ser bem desastroso.

Aqui na Resultados Digitais, levamos muito a sério o fator Data Driven. Ele nos ajuda na tomada de decisão a favor de uma implementação, estratégia ou ferramenta. Sempre nos baseamos em dados e conhecimentos adquiridos através de experimentos (pesquisa e benchmark).

Conclusão

Boas práticas ajudam o seu time a agregar a agilidade com qualidade. Porém, não se torne refém delas! Algumas vezes a melhor solução irá violar alguma. Quando isto ocorrer, use a quinta dica para encontrar a melhor solução.

Tem algo a acrescentar ou uma dica para sugerir? Aproveite e compartilhe suas ideias nos comentários.

Nando Sousa

Nando Sousa

Full Stack Developer

Comentários