Partage
  • Partager sur Facebook
  • Partager sur Twitter

Besoin d'aide pour la compréhension d'un code

Sujet résolu
    1 août 2021 à 20:33:28

    Bonjour,

    Je suis débutant et j’ai un exercice à réaliser mais je ne comprends pas comment m’y prendre pour le réaliser et j’aurais besoin d’aide pour m’aiguiller.

    Voici les différents codes sur lesquels je dois travailler :

    package com.openclassrooms.magicgithub.api;
    
    import com.openclassrooms.magicgithub.model.User;
    import java.util.List;
    import static com.openclassrooms.magicgithub.api.FakeApiServiceGenerator.generateUsers;
    
    public class FakeApiService implements ApiService {
    
        private final List<User> users = generateUsers();
    
        /**
         * Return a list of {@link User}
         * Those users must be generated by {@link FakeApiServiceGenerator}
         */
        @Override
        public List<User> getUsers() {
            // TODO: A modifier
            return null;
        }
    
        /**
         * Generate a random {@link User} and add it {@link FakeApiService#users} list.
         * This user must be get from the {@link FakeApiServiceGenerator#FAKE_USERS_RANDOM} list.
         */
        @Override
        public void generateRandomUser() {
            // TODO: A modifier
            
        }
    
        /**
         * Delete a {@link User} from the {@link FakeApiService#users} list.
         */
        @Override
        public void deleteUser(User user) {
            // TODO: A modifier
            
        }
    }

    package com.openclassrooms.magicgithub.repository;
    
    import com.openclassrooms.magicgithub.api.ApiService;
    import com.openclassrooms.magicgithub.model.User;
    
    import java.util.List;
    
    public class UserRepository {
    
        private final ApiService apiService; // TODO: A utiliser
        private Object User;
    
        public UserRepository(ApiService apiService) {
            this.apiService = apiService;
        }
    
        public List<User> getUsers() {
            // TODO: A modifier
            return null;
    
        }
    
        public void generateRandomUser() {
            // TODO: A modifier
            
        }
    
        public void deleteUser(User user) {
            // TODO: A modifier
           
        }
    }

    package com.openclassrooms.magicgithub.model;
    
    import java.util.Objects;
    import java.util.Random;
    import androidx.annotation.Nullable;
    import static com.openclassrooms.magicgithub.api.FakeApiServiceGenerator.FAKE_USERS_RANDOM;
    
    public class User {
    
        private final String id;
        private final String login;
        private final String avatarUrl;
    
        public User(String id, String login, String avatarUrl) {
            this.id = id;
            this.login = login;
            this.avatarUrl = avatarUrl;
        }
    
        // --- GETTERS ---
        public String getId() { return id; }
        public String getLogin() { return login; }
        public String getAvatarUrl() { return avatarUrl; }
    
        /**
         * Generate random user
         */
        public static User random(){
            return FAKE_USERS_RANDOM.get(new Random().nextInt(FAKE_USERS_RANDOM.size()));
        }
    
        @Override
        public boolean equals(@Nullable Object obj) {
            if (obj == null) return false;
            if (obj == this) return true;
            if (!(obj instanceof User)) return false;
            return (((User) obj).avatarUrl == this.avatarUrl && ((User) obj).login == this.login);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(login, avatarUrl);
        }
    }

    package com.openclassrooms.magicgithub.api;
    
    import com.openclassrooms.magicgithub.model.User;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.UUID;
    
    public abstract class FakeApiServiceGenerator {
    
    
        static List<User> generateUsers() {
            return new ArrayList<>(FAKE_USERS);
        }
    
        public static List<User> FAKE_USERS = Arrays.asList(
                new User("001", "Jake", "https://api.adorable.io/AVATARS/512/1.png"),
                new User("002", "Paul", "https://api.adorable.io/AVATARS/512/2.png"),
                new User("003", "Phil", "https://api.adorable.io/AVATARS/512/3.png"),
                new User("004", "Guillaume", "https://api.adorable.io/AVATARS/512/4.png"),
                new User("005", "Francis", "https://api.adorable.io/AVATARS/512/5.png"),
                new User("006", "George", "https://api.adorable.io/AVATARS/512/6.png"),
                new User("007", "Louis", "https://api.adorable.io/AVATARS/512/7.png"),
                new User("008", "Mateo", "https://api.adorable.io/AVATARS/512/8.png"),
                new User("009", "April", "https://api.adorable.io/AVATARS/512/9.png"),
                new User("010", "Louise", "https://api.adorable.io/AVATARS/512/10.png"),
                new User("011", "Elodie", "https://api.adorable.io/AVATARS/512/11.png"),
                new User("012", "Helene", "https://api.adorable.io/AVATARS/512/12.png"),
                new User("013", "Fanny", "https://api.adorable.io/AVATARS/512/13.png"),
                new User("014", "Laura", "https://api.adorable.io/AVATARS/512/14.png"),
                new User("015", "Gertrude", "https://api.adorable.io/AVATARS/512/15.png"),
                new User("016", "Chloé", "https://api.adorable.io/AVATARS/512/16.png"),
                new User("017", "April", "https://api.adorable.io/AVATARS/512/17.png"),
                new User("018", "Marie", "https://api.adorable.io/AVATARS/512/18.png"),
                new User("019", "Henri", "https://api.adorable.io/AVATARS/512/19.png"),
                new User("020", "Rémi", "https://api.adorable.io/AVATARS/512/20.png")
        );
    
        public static List<User> FAKE_USERS_RANDOM = Arrays.asList(
                new User("021", "Lea", "https://api.adorable.io/AVATARS/512/21.png"),
                new User("022", "Geoffrey", "https://api.adorable.io/AVATARS/512/22.png"),
                new User("023", "Simon", "https://api.adorable.io/AVATARS/512/23.png"),
                new User("024", "André", "https://api.adorable.io/AVATARS/512/24.png"),
                new User("025", "Leopold", "https://api.adorable.io/AVATARS/512/25.png")
        );
    }

    package com.openclassrooms.magicgithub.api;
    
    import com.openclassrooms.magicgithub.model.User;
    import java.util.List;
    import androidx.annotation.Nullable;
    
    public interface ApiService {
        List<User> getUsers();
        void generateRandomUser();
        void deleteUser(User username);
    }
    

    Dans le premier code j’ai 3 fonctions a modifier La première fonction doit retourner la liste d’utilisateur donc je suppose qu’il faut utiliser la variable users en faisant return users La deuxième fonction dois générer un utilisateur aléatoirement, j’utilise à nouveau la variable users en faisant users.add(User.random()), j’utilise la fonction random() de la classe User pour générer un utilisateur aléatoire et j’utilise la fonction add() pour ajouter l’utilisateur à la liste dans users Pour la troisième fonction je suppose que ç’est users.remove(user) mais je ne comprends pas le lien entre deleteUser(User user) de la classe FakeApiService avec la classe User et l’interface ApiService où la fonction est deleteUser(User username)

    Dans le deuxième code je comprends que je dois utiliser la variable apiService mais je ne comprends pas quoi faire.

    Et je ne comprends pas ce que fais ce bout de code, même si je sais que c’est un constructeur.

    public UserRepository(ApiService apiService) {
            this.apiService = apiService;
        }
    


    Merci d’avance pour votre aide

    • Partager sur Facebook
    • Partager sur Twitter
      1 août 2021 à 23:21:15

      Hello,

      Tu as une interface ApiService qui contient 3 méthodes. Tu as également UserRepository qui a les 3 mêmes méthodes et qui a un ApiService. Donc soit :

      - Le repository fait juste passe-plat. Il appelle la méthode correspondante de l’api dans chaque méthode (donc apiService.getUsers() pour la première méthode)

      - l‘api sert à rien. Tout le code pourrait être deplacé dans le Repository. 

      Personnellement j’ai tendance à penser que si une classe fait Passe-plat c’est qu’il y a un problème de conception quelque part.


      Pour la première question, c’est juste du nommage de paramètre. Ça n’a aucun lien et n’est pas tres important

      Pour la troisieme question, c’est de l’injection de dépendance. Grosso modo tu passes une interface à la classe qui va être utilisé dans les différentes methodes. Ça permet d’injecter ce que tu veux dans des Tests Unitaires et controller l’entree de donnée. Et donc vérifier que la sortie correspond à ce que tu veux (ce qui n’a aucun intérêt si ta classe fait passe-plat mais bon. C’est un autre débat)

      Il faut bien comprendre que c’est une interface. Derrière tu peux avoir n’importe quelle classe qui implémente cette interface.

      Je trouve ça assez curieux que tu te retrouves avec un code en Clean Archi alors que de toute évidence ce n’est pas toi qui en est arrivé là.  

      • Partager sur Facebook
      • Partager sur Twitter
        5 août 2021 à 14:55:22

        Bonjour,

        Merci pour tes explications et ton aide.

        En effet le code n'est pas de moi, c'était un exercice avec une application déjà créée mais qui ne fonctionnait pas.

        Le but de l'exercice était de modifier les TODO pour que l'appli fonctionne.

        Le problème est résolu.
        • Partager sur Facebook
        • Partager sur Twitter

        Besoin d'aide pour la compréhension d'un code

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown