ubiquitous language - portugues
DESCRIPTION
TRANSCRIPT
Melhorando a comunicação entre
stakeholder/desenvolvedores com a
Linguagem Ubíqua
Alline Watkins
O problema:
Programadores conversam usando jargões técnicos (design patterns, abreviações, termos técnicos)
Especialistas do Domínio usam terminologias específicas de suas áreas de conhecimento (economia, hotelaria, telecom, …)
Computadores conversam linguagens de programação
alguém tem que ceder!
O Acordo:
Agile prega que programadores devem usar a linguagem de domínio como nomenclaturas no código fonte(“ubiquitous language”, “system metaphor” na XP)
u.bí.qu:o que está ao mesmo tempo em toda a parte, onipresente
(pt.Wikcionário.org)
UBIQUITOUS LANGUAGE
. A language structured around the domain model and used by all team members to connect all the activities of the team with the
software. (Excerpted from Domain-Driven Design by Eric Evans)
. We understand each other. (Excerpted from The Art of Agile Development by James Shore and Shane Warden, published by O'Reilly. Copyright © 2008 the authors. All rights reserved.)
Histórias de Usuário
Reuniões
E-mails
Mensagens Intântaneas
Planejamento de Projeto
Documentação do Software
E CÓDIGO FONTE !!
Onde aplicar:
As vantagens...
Comunicação mais Eficiente
Menor risco de desentendimentos
Conhecimento do Domínio armazenado no código fonte
Código mais compreensível (manutenibilidade, extensibilidade)
NÃO
Quando o Usuário clica no Grid, o sistema exibe 0 ou X dependendo que qual é o Usuário atual.
Exemplo de História de Usuário:
SIM
Quando o Jogador clica no Tabuleiro, o Jogo exibe o símbolo 0 ou X dependendo de qual é o Jogador atual.
(retiradas de um software exemplo para o Jogo da Velha)
NÃO
. Integer i = new Integer();
. String char1 = new String();
. public class GameDAO() { }
. catch (Exception e)
Exemplos no Código Fonte:
SIM
. String realSignificadoDaString = new String();
. public class ScoreDataLoader() { }
. catch (Exception ExcecaoUsuarioNaoAutenticado)
NÃO
. Ambiguidades
. Inconsistências
. Sinônimos
. Abreviações
SIM
. Clareza
. Precisão
. Reuso
. Nomes Completos
/** * Exibe a string O ou X na celula do jogo.*/
public class MostraCellGrid{
public static void exibeUsuario (Grid grid, Cell cell) { if (!Inicializacao.flag && Inicializacao.statusJogo.getSequencia() == null && isVazio(grid, cell)) {
Inicializacao.flag= true;
String mk= exibeString(Inicializacao.statusJogo .getUsuarioCorrente().getStringUsuario());
grid.setHTML(cell.getRowIndex(), cell.getCellIndex(), mk);
Inicializacao.statusJogo.getStatus()[cell.getRowIndex()] [cell.getCellIndex()] = Inicializacao.statusJogo .getUsuarioCorrente();
GameEnd.verificaFim(Inicializacao.statusJogo, cell.getRowIndex(), cell.getCellIndex()); }(...)}
Uma classe ANTES e DEPOIS da Linguagem Ubíqua
/** * Efetiva o movimento do jogador na grade do jogo. */
public class MovimentoDoJogador {
/** * Quando o jogador clica numa celula na grade do tabuleiro o jogo desenha * um 0 ou X dependendo de qual e o jogador atual. */
public static void mover (GradeDoJogo gradeDoJogo, Cell celulaSelecionada) {
if (!VariaveisGlobais.flagDeAguardoDoMovimento && VariaveisGlobais.statusCorrenteDoJogo.getSequenciaGanhadora() == null && eCelulaVazia (gradeDoJogo, celulaSelecionada)) {
VariaveisGlobais.flagDeAguardoDoMovimento = true;
String simbolo = exibeSimboloDoJogador ( VariaveisGlobais.statusCorrenteDoJogo .getJogadorCorrente().getSimboloDoJogador());
gradeDoJogo .setHTML( celulaSelecionada .getRowIndex(), celulaSelecionada .getCellIndex(), simbolo);
ChamadaParaOJulgamentoDoMovimento.verificaSeGanhou( VariaveisGlobais.statusCorrenteDoJogo, celulaSelecionada .getRowIndex(), celulaSelecionada .getCellIndex()); }}
(...)}
(Excerpted from a Tic Tac Toe Game source code)
Qual das duas opções um Stakeholder melhor entenderia?
Movimento do Jogador Efetiva o movimento do jogador na grade do jogo.
Mover Quando o jogador clica numa celula na grade do tabuleiro
o jogo desenha um 0 ou X dependendo de qual e o jogador atual.
E Celula Vazia Um jogador podera selecionar somente as celulas que
ainda nao foram selecionadas.
Mostra Cell Grid Exibe a string O ou X na celula do jogo.
Exibe Usuario Is Vazio
(retiradas de um software exemplo para o Jogo da Velha)