Stijn121 / educom-webshop-database-1692367513

0 stars 0 forks source link

Haal de product info voor de webshop op in de business layer, niet in de presentation layer #19

Open JeroenHeemskerk opened 1 year ago

JeroenHeemskerk commented 1 year ago

In de code hieronder wordt het ophalen van de producten in de presentatie laag gedaan, https://github.com/Stijn121/educom-webshop-database-1692367513/blob/92f9bdc1060b2f59c34f9dda5a51044befb48b94/index.php#L205-L213

Dit is niet correct, zeker als er excepties optreden dan wil je dit bijvoorbeeld in de processRequest stap doen.

function ProcessRequest($page){
    $data['genericErr'] = "";
    switch ($page){
        /* ... */
        case "webshop":
            // Optioneel kan je onderstaande code ook in een functie zetten $data = GetWebshopData();
            try {
                 $data['products'] = SearchForProducts();
            } 
            catch (Exception $e) {
                 $data['genericErr'] = "Kan de producten niet ophalen, probeer het later nogmaals";
                 LogDebug("Error collecting products: " . $e -> getMessage());
            }
            break;

        case "webshopitem":
            // Optioneel kan je onderstaande code ook in een functie zetten $data = GetWebshopItemData();
            try {
                $row = GetUrlVar("Row"); // de default is al "". Ik zou deze variabele "id" of "productId" noemen
                $data['product'] = SearchForProductById($row); // Maak een functie die de data voor 1 product of NULL teruggeeft
            } 
            catch (Exception $e) {
                 $data['genericErr'] = "Kan dit product niet ophalen, probeer het later nogmaals";
                 LogDebug("Error collecting product with id " . $row . ": " . $e -> getMessage());
            }
            break;

        default: 
            /* ... */
            break;
    }

en dan de $data aan resp. showWebshop of showWebshopItem meegeven in de showContent functie

JeroenHeemskerk commented 1 year ago

Dit is trouwens ERG inefficiënt, alle producten ophalen en dan maar 1 gebruiken. Je kan beter de database de id geven en die laten opzoeken https://github.com/Stijn121/educom-webshop-database-1692367513/blob/92f9bdc1060b2f59c34f9dda5a51044befb48b94/index.php#L210-L212