MouseOver Studio

MouseOver Studio header image 2

“Tudo o que eu sei sobre DSLs o aprendi com video games”

May 11th, 2008 por Diego Carrion · Sem comenários

Constantemente quando estou desenvolvendo software lembro desse post realizado por Phillip Calçado aka Shoes.

Confesso que quando li o título pensei “Vixi o Shoes deve ter bebido demais naqueles barzinhos em Melbourne” :P mas quando terminei de ler o post meu pensamento foi “PQP que foda!”.

O post esta em inglês mas a idéia de forma simplificada é que os video games de um tempo atrais são comparáveis com código confuso e os video games modernos com código simples de entender.

Para explicar tal comparação Shoes começa mostrando uma imagem do jogo Pong:

Pong

Ele explica que o jogo representa um tennis de mesa mas pode ser confuso identificar isso, que pode ser confundido com gol a gol ou com um jogo de naves. O mesmo acontece com alguns códigos. Quantas vezes ja vimos códigos que são muito difíceis de ser analisados e/ou podem parecer que estão fazendo uma coisa quando na realidade estão fazendo outra? Foi mostrado o seguinte exemplo:

public void sendEmailWithCsvFile(String from, String to, String subject,
		String body, List csvFileLines) {
	Properties props = new Properties();
	props.put("mail.smtp.host", "localhost");
	Session session = Session.getDefaultInstance(props);
	MimeMessage msg = new MimeMessage(session);
	try {
		msg.setFrom(new InternetAddress(from));
		InternetAddress[] address = { new InternetAddress(to) };
		msg.setRecipients(Message.RecipientType.TO, address);
		msg.setSubject(subject);
		msg.setSentDate(new Date());
		MimeBodyPart part1 = new MimeBodyPart();
		part1.setText(body);
		MimeBodyPart part2 = new MimeBodyPart();
		StringBuffer buffer = new StringBuffer();
		for (String line : csvFileLines)
			buffer.append(line + "\n");
		part2.setContent(buffer.toString(), "text/csv");
		part2.setFileName("file1.csv");
		Multipart mp = new MimeMultipart();
		mp.addBodyPart(part1);
		mp.addBodyPart(part2);
		msg.setContent(mp);
		Transport.send(msg);
	} catch (AddressException e) {
		throw new RuntimeException(e);
	} catch (MessagingException e) {
		throw new RuntimeException(e);
	}
}

A simples vista fica difícil de entender o que o código esta fazendo, o que ele representa. Esse código poderia ser bem mas claro e explicito, como o seguinte:

public void sendEmailWithCsvFile(String from, String to, String subject,
		String body, List csvFileLines) {
	StringBuffer buffer = new StringBuffer();
	for (String line : csvFileLines)
		buffer.append(line + "\n");
	Properties props = new Properties();
	props.put("mail.smtp.host", "localhost");
	MailService mailService = new MailService(props);
	mailService.newMessage()
		.from(from)
		.to(to)
		.subject(subject)
		.body(body)
		.attachTextFile("file3.csv", buffer.toString())
		.send();
}

É esse tipo de código, simples de entender, que se compara com os video games modernos, como Rockstar Table Tennis:

Rockstar Table Tennis

Ao ver aquele jogo não cabe duvida que se trata de um jogo de tennis de mesa.

Quando estou escrevendo código lembro do entendido nesse post e tento fazer meu código comparável com os jogos modernos, tentando que eles representem ao máximo a intenção deles. Quem sabe algum dia a experiência de ler meu código seja tão próxima ao domínio como a dos jogos de Wii com alguns esportes.

Tags: ddd · programação · qualidade

0 respostas ate agora ↓

  • Todavia não existem comentários... Arrasa preenchendo o formulário embaixo.

Deixar um comentário