Ubiquitous Language - Portugues

Preview:

DESCRIPTION

 

Citation preview

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)

alline.oliveira@gmail.com

!!

OBRIGADA !!

Recommended