Ampliació Pràctica de Setembre 2009

Què cal fer?

Objectius

Fer les entregues del curs de forma progressiva

L'alumne ha d'entregar les sessions que no ha entregat durant el curs. Cal entregar els tarballs amb l'estat del codi i de la documentació al final de cadascuna de les sessions. S'aconsella fer entregues progressives, tan bon punt s'acaba la fase per tal de que els professor poguem donar directrius correctores.

Un usuari pot rebre novetats amb múltiples mètodes

Fins ara un usuari rebia --per defecte-- les novetats en publicacions per mail, però també podia triar rebre-les per sms, en comptes de mail. Ara, AmalgamaOnline ens demana que un usuari pugui ser notificat també per correu convencional (carta) i amb múltiples mètodes a la vegada. Per exemple, es podrà escollir rebre notificacions per mail i carta però no per sms. D'altra banda, ens demanen es puguin notificar més coses apart de "nova obra": Concretament voldrem notificar "events" (conferències, presentacions, aparicions als mitjans, notícia...) relacionats amb un autor o un tema.

Abstracció del missatge de notificació

Recordem que actualment, les entitats Notificadores i Receptores (patró observer) envien i reben missatges mitjançant mètodes com aquests (els noms dels mètodes són només un exemple) :

void notificaNovaObra(const std::string & idObra, const std::string & idAutor);
void repNotificacioNovaObra(const std::string & idObra, const std::string & idAutor);

La dificultat d'introduir els canvis demanats prové de que ara el missatge que enviem no consisteix en un idObra i idAutor sinó que pot contenir més detalls. Per tant, caldrà canviar els arguments d'aquests mètodes. De fet, també els haurem de renombrar amb un nom més genèric (no específic de "nova obra")

La idea és encapsular tota la informació del missatge amb un objecte de classe Notificacio. Serà responsabilitat de la classe donar el text() de la notificació. Cal tenir en compte que cada tipus de notificació diferent (nova obra, conferència, aparició als mitjans, notícia ...) pot requerir un formateig del text diferent. La qual cosa suggereix tenir subclasses de Notificació amb un mètode text() polimòrfic.

Procediment a seguir

De banda del disseny i la implementació final, el que es valorarà sobretot es el procés de desenvolupament. Cal de plantejar-se, primer, un o diversos test funcionals que reflecteixin la funcionalitat a la que es vol arribar. Bàsicament, els procediments que s'expliquen a les sessions del curs.

Tingues en compte que les dues noves funcionalitats demanades requereixen modificar la classe façana AmalgamaOnline. Això sí, caldrà afegir nous tests funcionals i també unitaris per testejar la nova funcionalitat (i guiar-ne el desenvolupament). Recordeu que en aquesta pràctica, els tests funcionals són aquells que "ataquen" la façana i no les classes internes. Mentre que els tests unitaris "ataquen" les classes internes.

Tal com es va fer per la sessió C2, elaboreu una guia TDD per ilustrar la ruta de desenvolupament que heu seguit. Escriviu-ho en un fitxer anomenat setembre-TDD.txt.

Heu de reflectir-hi el procés de desenvolupament, indicant, sobretot els nous tests que introduïu i els refactorings (justificats breument) que aneu fent. Aquest text ens servirà per evaluar si s'han fet servir les tècniques de TDD i refactoring explicades al llarg del curs.

Que cal entregar