Já reparou como todo alien na TV fala a lingua terráquea?

por que o código precisa falar a linguagem do seu interlocutor.

Uma das coisas que mais gosto em um sistema bem escrito é aquela mágica sensação de conseguir ler o código e e navegar de uma chamada a outra, fluindo sem ser obrigado a ler os métodos que compõem o código que estou lendo.

Por isso, nesse texto de busão, vou tentar falar do que se deve ter em mente para conseguir esse tipo de código, que fornece essa fluência ao leitor e que faz o código não parecer com grego antigo ou uma alteração do código morse com 10 sinais por caractere?

Tudo se baseia na linguagem ideal para cada tipo de código.

A analogia mais clara que me vem à mente está no escritório. Quando você fala com seu colega programador vc usa uma seleção de palavras que vocês estabeleceram como padrão, quase um dialeto que os alguns chamam de informatiquês, quando fala com seu gerente esse dialeto é outro e com o diretor é outro e assim continua com o RH, o financeiro, a garota bonita do café, com o visitante e o prestador de serviço.

Em todas essas ocasiões ainda é você falando e a mensagem pode inclusive ser a mesma, mas o interlocutor muda e você se adapta a ele para se tornar um comunicar mais eficiente.

Eu espero que você já tenha acordado para o fato de que cada Interlocutor requer uma linguagem, ou melhor, requer uma modelagem diferente da mensagem. Eu demorei para perceber isso e a quantidade de ruído que foi criado a partir desse erro foi grande.

Não se trata de alterar o que você quer dizer, mas formatar a mensagem na expectativa de ser melhor compreendido.

Essa história toda para dizer que o mesmo efeito decorrente do dialeto na linguagem falada também ocorre no código que você escreve.

Pergunto:
Você acha chato ter de consultar um dicionário a cada três palavras ditas pelo seu interlocutor e sonha com um michaellis instalado num Google glass? E se as palavras ditas fossem o código e o dicionário fosse todo o código do mundo excluindo aquele que está sendo lido(que precisa ser traduzido)?

Difícil né? Sacou por que existe os padrões. Sacou por que existe code style e por que existe dicionário de domínio. Tem espaço pra gíria no código? Claro, se for uma gíria universal!

Para conseguir isso a primeira chave é entender que interlocutor é cada “lugar em que você escreve código”.

Um código dentro de um controller em um MVC, por exemplo, quando você lê um código no controller, o que espera entender? Eu espero entender que dados estão chegando, como eles deveriam chegar e a intenção com relação a eles, então se ele comunica algo mais que isso é um controller prolixo, que fala demais e não é objetivo e se ele não fala nem isso ele é surdo/mudo.

Além dessas possibilidades ainda existe aquela do Controller de que ele fala uma língua desconhecida.

Exemplo de um controller que se comunica bem.

Class UserController
{
  public function editAction()
  {
    $input = User:: validate($_POST);
    if (!input->isValid()){
     return erro("dados inválidos");
    }
    $user = new User ($input);
    if (! $user->exists()) {
      return error("User não existe");
    }
    Persistence::save($user);
  }
}

O código acima pode ser lido em 10 segundo e diz:

a) trata da entidade usuário.
b)  recebe dados via POST.
c) espera os dados formatados de uma maneira específica.
d) só trabalha com usuários existentes.
e)Grava alterações em usuários existentes.

Essa é a linguagem esperada dentro de um controller mas ele poderia ainda utilizar uma camada de serviço e ser ainda mais sucinto.

  public function editAction()
  {
    $resultado = serviçoDeUsuario->editaSeExistir($_POST);
    return $resultsdo->hasError();
  }

Ou pode escolher falar todas as línguas(ser prolixo e ter de se repetir toda hora), validando campo a a campo o input, fazendo um select na tabela user e depois setar cada campo numa query e gravar. O que é mais claro?

Eu sei, vc está rindo de tão claro que o tema é para você, mas então pq ainda existe tanto código escrito direto no controller, colocando toda a lógica lá?

Enfim, o mesmo raciocínio deve ser levado para outras partes. As entidades devem saber lidar com as características da entidade, como seus dados, suas regras de negócio e, quando chegar a hora de persistir os dados, ela deve delegar para a camada de persistência.

Se ocorrer um erro durante o processamento, não é a entidade que deve registrar o evento no log, ela deve demandar para alguém especializado nessa ação.

Se cada camada falar sua lingua específica vai ser facil faze-las se adapatar para conversarem, por que o objetivo de cada uma sera de facil discernimento. Agora, se todas elas falarem todas as linguas, você tera uma linda babel sem controle.

Alias, você ja reparou como todo alien na TV fala a lingua terráquea. Por que será?

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s