dbourdette / fun-reco

0 stars 0 forks source link

Implémentation basique de RecommendationFacade #17

Closed dbourdette closed 11 years ago

dbourdette commented 12 years ago

A la suite de la création du modèle de données (#16), nous pouvons maintenant proposer une implémentation de RecommendationFacade.

Il faut donc créer une classe qui implémente les méthodes suivantes de RecommendationFacade :

def updateProfile(Profile profile);
Profile findProfile(String email, String facebookId);
def updateFriends(String facebookId, List<Friend> friends);
List<Friend> findFriends(String facebookId);
def pushAction(Action action);
List<Action> findActions(int offset, int limit);
List<Action> findActions(String facebookId, int offset, int limit);
int countActions();

Afin de tester leur bon fonctionnement, il faut écrire des tests unitaires.

Les autres méthodes peuvent retourner des UnsupportedOperationException pour le moment.

Il ne faut pas brancher cette classe sur l'interface graphique pour le moment car les 2 méthodes manquantes sont nécessaires.

tomtom2 commented 12 years ago

un de mes test échoue car je n'arrive pas à persister Action du package fun.reco.

Je ne comprend pas non plus le but de certaines méthodes: -> Object updateProfile(Profile profile)

-> Object pushAction(Action action)

dbourdette commented 12 years ago

Pouvez voir avec Angela concernant le but de ces méthodes ? Vos 2 travaux en cours étant complémentaires, vous devez pouvoir vous entraider.

tomtom2 commented 12 years ago

On modifie les 2 méthodes cités précédemment :

-> Profile updateProfile(Profile profile)

-> Action pushAction(Action action)

dbourdette commented 12 years ago

Dans que but ?

dbourdette commented 12 years ago

Quel est le sens de fun.reco.RecommendationFacadeService par rapport com.github.funreco.RecommendationFacade ?

fun.reco.RecommendationFacade devrait implémenter com.github.funreco.RecommendationFacade

Pour différencier votre implémentation de l'interface, vous pouvez préfixer ou suffixer, par exemple RecommendationFacadeImpl

Votre implémentation devrait être dans le package com.github.funreco.basic pour plus de cohérence avec le reste.

Le test unitaire doit être dans le même package que la classe testée.

fri1, act et o ne sont pas des noms de variables acceptables dans les tests unitaires.

tomtom2 commented 12 years ago

J'ai effectué les changements pour les packages, et je suis désolé pour l'état de la classe test.

Pour ce qui ait de l'interface com.github.funreco.RecommendationFacade, elle utilise l'ancien modèle de données. Doit-on vraiment la relier à l'implémentation basique du futur moteur?

dbourdette commented 12 years ago

RecommendationFacade n'utilise pas l'ancien modèle de données mais le modèle de données publique, celui qui sert pour le service REST et l'interface web.

Vous pouvez regardez le schéma qui explique le découpage. Ce qui est ancien est dans le package legacy.

dbourdette commented 12 years ago

J'ai ajouté un test qui fonctionne testUpdateUnknownProfile dans RecommendationFacadeTests afin de vous montrer ce qu'il faut faire.

La ligne magique dans le test en groovy est

import com.github.funreco.Profile as PublicProfile

Elle permet de travailler facilement avec com.github.funreco.Profile et fun.reco.Profile sans renommer ces classes. Il serait mieux que ces classes aient des noms différents, mais on fait avec.

Le test est divisé en 3 parties.

// arrange
...

// act
...

// assert
...

Cela rend le test facile a lire.

Enfin le code dans la Facade, il prend le modèle de données publique (com.github.funreco) et le transcrit afin de le sauver en base.