Je suis un programmeur C# qui vient de découvrir la beauté de la programmation F# (grâce au livre Domain Modeling Made Functional). Cependant, j'ai été surpris de ne pas avoir trouvé d'exemples de scénario courant : l'utilisateur a plusieurs options qu'il peut cocher. Par exemple, en réservant une chambre d'hôtel, vous souhaiterez peut-être avoir plusieurs options supplémentaires, comme le Wi-Fi gratuit, une chambre pour les allergiques, les animaux domestiques admis, le petit-déjeuner gratuit, un parking gratuit, etc. Comment modéliser cela ? Tous les exemples que j'ai trouvés n'ont que deux options au choix : opt1 ou opt2, ou les deux. Cette solution n'est pas évolutive, cependant.

J'ai trouvé une solution, mais j'ai également besoin d'une solution pour un cas plus difficile, où les options peut avoir un paramètre, comme dans l'exemple de réservation de chambre d'hôtel : Distance du centre-ville (l'utilisateur peut fournir une valeur), Prix maximum par nuit, etc. Ce sont des options de recherche que l'utilisateur peut cocher s'il le souhaite, mais s'il coche, il doit fournir un paramètre obligatoire pour chaque option cochée.

f#
3
Kimke 4 oct. 2020 à 13:26

1 réponse

Meilleure réponse

Étant donné que vous souhaitez avoir des valeurs associées aux différentes options, ce que je ferais dans votre cas serait d'utiliser simplement un enregistrement avec plusieurs champs facultatifs.

type Booking = 
    {
        freeWifi: unit option
        maxPricePerNight: decimal option
    }
    static member Empty =
       {
           freeWifi = None
           maxPricePerNight = None
       }

Il peut sembler que prolonger ce disque serait pénible, mais je ne pense pas que ce serait vraiment le cas dans un système réel. Avec des éléments tels que le membre vide fourni et la correspondance de modèle sur des champs d'enregistrement individuels, vous n'auriez jamais vraiment besoin de répertorier tous les champs en dehors de la définition de type.

Vous pouvez voir une solution plus robuste à ce problème dans l'analyseur d'options CLI Argu (en utilisant les DU et les citations pour rechercher valeurs d'option par nom de cas), mais c'est exagéré pour le scénario que vous gérez.

3
scrwtp 4 oct. 2020 à 13:30