@Sabok : Je sens que ta réponse, elle va lui couper la chique !
@Shornaal : Il est difficile de faire une réponse utile qui soit concise : c'est un vaste sujet. Un peu le corrolaire de ton topic précédent : https://cadernis.fr/viewtopic.php?f=51&t=667&p=7527#p7527
Au niveau du découpage grossier, pour bien faire, il faudrait :
- [1] mettre dans un (ou plusieurs) assemblies à part (dll) tout ce qui touche à la mécanique générique : ce qui n'est pas spécifique à Dofus. Cette couche (layer) ne doit (en principe) pas dépendre de l'implémentation des autres couches.
- [2] mettre dans un (ou plusieurs) assemblies tout ce qui est dépendant de Dofus, mais indépendant du bot proprement dit : décodage des paquet, reader D2O, maps et pathfinding, envoi/reception de messages...
Avantages : Les mises à jour de Dofus n'affectent que cette couche, le plus souvent.
Il est facile de partager cette couche avec différents projets
- [3] le bot proprement dit, utilisant les services des couches [1] et [2].
[3.1] Isoler tout ce qui concerne l'IHM
[3.2] Isoler tout ce qui touche à la gestion des données
[3.3] Isoler le traitement des messages
Cependant, il faut être conscient qu'un tel découpage complexifie nettement la mise en place et le démarrage du projet. Par contre, ça en simplifie grandement l'évolution et c'est plus agréable.
Dans certains cas, on peut limiter ce cloisonnement (pour simplifier le développement) tout en gardant une bonne visibilité, avec les classes partielles. Chaque partial regroupant ce qui concerne un aspect.
Par exemple, j'ai une classe "PlayerCharacter", qui intègre une partie base de données dans PlayerCharacter.Database.cs, la gestion des messages dans PlayerCharacter.Messages.cs, ce qui impacte l'IHM dans PlayerCharacter.visual.cs ect...
De la même façon, on aura pour la gestion des comptes, Account.Database.cs, Account.Messages.cs....
Concernant le traitement des messages, il est intéressant de passer par des évènements pour que toutes les classes concernées voient passer les messages et traitent ceux qui la concerne (pour éviter le méga-switch-de-la-mort-qui-tue) .