Comentários - Domain Driven Design - Capítulo 1

Breves comentários sobre o capítulo do livro 'Domain Driven Design', escrito por Eric Evans

Existe uma menção ao capítulo 12 - Relating design patterns to the model e também ao capítulo 4 - Layered Architecture.

Uma parte interessante aqui no capítulo 1 foi sobre deixar regras de negócio mais explícitas, um exemplo é dado em que a regra está implícita dentro de um método da aplicação:

public int makeBooking(Cargo cargo, Voyage voyage) {
	double maxBooking = voyage.capacity() * 1.1;
	if ((voyage.bookedCargoSize() + cargo.size()) > maxBooking)
		return –1;
	int confirmation = orderConfirmationSequence.next();
	voyage.addCargo(cargo, confirmation);
	return confirmation;
}

Então o código é refatorado para algo mais ou menos assim:

public int makeBooking(Cargo cargo, Voyage voyage) {
	if (!overbookingPolicy.isAllowed(cargo, voyage)) return –1;
	int confirmation = orderConfirmationSequence.next();
	voyage.addCargo(cargo, confirmation);
	return confirmation;
}

public boolean isAllowed(Cargo cargo, Voyage voyage) {
	return (cargo.size() + voyage.bookedCargoSize()) <= (voyage.capacity() * 1.1);
}

A vantagem aqui é que a regra de negócio de overbooking mais explícita e acessível, o que facilita o entendimento por todas as pessoas envolvidas no projeto. Além, é claro, de tornar a regra mais clara (explícita).

Na minha opinião isso também traz outra série de vantagens, facilita a manutenção e contribui para que funções façam apenas uma coisa.

O capítulo também fala da importância de se aprofundar no entendimento do domínio (isto é, das regras de negócio da empresa) para criar modelos mais úteis e representativos.

O capítuo 1 é uma introdução, e os capítulos mais importantes são: 2, 3, 9 e 14 - Pois esse livro é muiot técnico e difícil, aprofunda muito no tema, então uma leitura mais rápida passaria por estes capítulos citados.