---
tags: code review, wemanity, Java
---
# code review [bakkari1u /Recommendation-system](https://github.com/bakkari1u/Recommendation-system)
## Code scan :mag_right:
### Overall project
#### README
- :arrow_up: il y a un readme c'est bien :smiley_cat:
- :arrow_down: le readme n'indique pas comment lancer le programme, ni quelle version de java est utilisée (le readme est technique)
#### Project sturture
- :arrow_down: le projet est mal structuré, on pourrait avoir un dossier pour le code et un autre pour les assets avec une seule main function qui donnera à l'utilisateur le choix d'exécuter le programme qu'il souhaite
### MUT.java
- [LIGNE 8](https://github.com/bakkari1u/Recommendation-system/blob/c4d3ac58319626a5d5446385fab265dfb9ee71df/MUT.java#L8) la fonction est vide et n'est pas utilisée donc elle doit etre supprimée.
- [LIGNE 14](https://github.com/bakkari1u/Recommendation-system/blob/c4d3ac58319626a5d5446385fab265dfb9ee71df/MUT.java#L14) la main fonction throws une exception ce qui veut dire qu'elle n'est pas gérée. Le mieux serait de faire un **try/catch** sur la/les statements concernées et gérer l'exception (l'ouverture du fichier à la ligne 22).
- [LIGNES 16 & 17](https://github.com/bakkari1u/Recommendation-system/blob/c4d3ac58319626a5d5446385fab265dfb9ee71df/MUT.java#L16-L17) Pourquoi utiliser des types **Vector** à la place d'une **ArrayList** sachant que les vectors sont plus gourmants en ressources ? De plus le nom d'une variable commence toujours par une minuscule.
- [LIGNES 32 à 40](https://github.com/bakkari1u/Recommendation-system/blob/c4d3ac58319626a5d5446385fab265dfb9ee71df/MUT.java#L32-L40) nous voulons avoir une liste à valeur unique le type adéquat pour **themes & users** est **SET** et non **Vector**. cela évitera la verification de l'existance de l'object. Pour une meilleur lisibilité et evolutibilité du code il faudrait mettre les index **contenus[1] ou contenus[2]** dans une Enum (idem pour le path des fichiers)
```java
// Par exemple
public enum LongIndex {
ID(0),
USER(1),
THEME(1);
private int value;
public int getValue() {
return this.value
}
test(int value) {
this.value = i;
}
}
...
users.add(contenus[LongIndex.USER.value]);
users.add(contenus[LongIndex.THEME.value]);
...
```
- [LIGNE 42](https://github.com/bakkari1u/Recommendation-system/blob/c4d3ac58319626a5d5446385fab265dfb9ee71df/MUT.java#L42) Il faut penser à fermer **BufferedReader**
- [LIGNES 48 à 90](https://github.com/bakkari1u/Recommendation-system/blob/c4d3ac58319626a5d5446385fab265dfb9ee71df/MUT.java#L48-90) Ici encore **try/catch** et **finally** pour toujours fermer ton **FileWriter** meme en cas d'exception. Il faut aussi penser à donner des noms de variable explicites
### Recomm.java
- [LIGNES 28 à 56](https://github.com/bakkari1u/Recommendation-system/blob/c4d3ac58319626a5d5446385fab265dfb9ee71df/Recomm.java#L28-L56) Beaucoup mieux sur la gestion des exceptions mais il y a un double **try/catch** ce n'est pas necessaire dans ce cas. On peut juste faire suivre les **catch** comme à la ligne **44**. Enfin il faut penser à fermer **BufferedReader** :wink:
## Notes :writing_hand:
Bien dans l'ensemble, bonne connaissance algorithmique doit s'améliorer en java et a besoin d'être initié aux pratiques craft