---
# System prepended metadata

title: 'code review  [bakkari1u /Recommendation-system](https://github.com/bakkari1u/Recommendation-system)'
tags: [code review, ' Java', ' wemanity']

---

---
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