Partage
  • Partager sur Facebook
  • Partager sur Twitter

Architecture soft appliqué au protocole LoRaWAN

Design pattern

    7 juin 2024 à 18:03:41

    Bonjour à tous ;)

    Je cherche à faire un code python qui évite la répétition des classes et faire le code le plus modulaire et plus propre possible.

    Pour cela voici mon besoin : 

    Je souhaite avoir une classe mère qui décrit comment construire les messages de requêtes et les messages de réponse. Ainsi que des méthodes afin de pouvoir les décoder (requête et réponse) et me soustraire du protocole de communication. (Que je souhaite modifier dynamiquement lors de l'exécution du code)

    J'ai donc pensé à créer deux méthodes.

    Je prend maintenant l'exemple de LoRaWAN

    Il existe deux types de messages -> Les messages de Type "Uplink" et "Downlink".

    - Dans ce cas Uplink correspond à getRequestMessageBuilder

    - Et Downlink correspond à getResponseMessageBuilder

    (Cela pointerait sur des classes différentes en HTTP, en Bluetooth, etc ...)

    Ces messages ont de multiples attributs qui sont très nombreux (Chacun a ses propres attributs, difficile de mettre tout cela en commun)

    - Port

    - DevEUI

    - EncodedPayload

    - ...

    Ces deux types de messages (Uplink et Downlink) peuvent être du type UplinkFragment, DownlinkFragment, UplinkMulticast, DownlinkMulticast, UplinkOwner, DownlinkOwner, etc etc ... 

    Par exemple DownlinkFragment utilise un port différent par exemple dans ce cas 201.

    Et je souhaite depuis mon code métier appeler des méthodes de "Fragment" afin de construire mes messages. (Cf : https://lora-alliance.org/wp-content/uploads/2020/11/fragmented_data_block_transport_v1.0.0.pdf

    A partir de là cela commence à devenir compliqué et je commence à multiplier mes classes : comment pourrais-je faire ? 

    J'espère avoir été clair : le sujet n'est pas simple. 

    Merci de votre réponse.

    Cordialement

    Kasimashi

    -
    Edité par Kasimashi 7 juin 2024 à 18:23:49

    • Partager sur Facebook
    • Partager sur Twitter
      7 juin 2024 à 18:29:50

      Je cherche à faire un code python qui évite la répétition des classes et faire le code le plus modulaire et plus propre possible.

      Ça commence mal :D.

      La répétition des classes n'est pas une mauvaise chose, tout particulièrement si on prête attention au principe SOLID.

      Le principe DRY est souvent mal compris et on se retrouve avec des codes complexes et plus très lisibles (est-ce que 6 mois après je comprend ce j'ai écris).

      Je n'ai pas lu vos docs, mais si vous suivez ce principe (SOLID) vous êtes bon !

      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        8 juin 2024 à 13:13:43

        bonjour

        en fait je n'ai pas forcément compris ton besoin : je crois comprendre que les paramètres sont différents à l'envoi et qu'aussi les réponses ? Et j'ignore si ce sont des classes ou un simple dict ou json

        Il me semblait logique d'écrire:

        class TransportChannel:
          def __init(self, proto: Protocol) : self.protocole = proto
          def __send(self) : self._resp = self.protocole.send() # un getter response() qui reformate _resp en plus génériue quel que soit le protocole ?
        class protocol1(Protocol):
          pass
        p1 = Protocole1(x, y, z)
        p2 = Protocole2(a, b)
        transport = TransportChannel(p1) # ou p2
        transport.send()
        resp : TProtocolResponse = transport.response()  # resp est spécifique à protocolX ? ou générique après être passé par le getter de transport ?

        A noter qu'il existe des design pattern, oui plus de classes à la conception, mais pour maintenance plus simple et un code compréhensible par tous . Par exemple l'adaptateur et le décorateur sont plus que courant.

        -
        Edité par papajoker 8 juin 2024 à 13:32:36

        • Partager sur Facebook
        • Partager sur Twitter

        Architecture soft appliqué au protocole LoRaWAN

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown