Citation:
Envoyé par
germinolegrand
Pour moi le SRP quand il apparaît n'est qu'une constatation que je fais quand je relis mon code, et je ne le respecte pas nécessairement (bien qu'au final mon code le respectera très certainement dans sa majeure partie). D'ailleurs, dans mes premières étapes de développement c'est bien un des principes que je respecte le moins ^^.
Et pourtant, c'est sans doute le concept qu'il est le plus facile de respecter dés le début, et qui risque de poser le plus de problème pour arriver à le respecter lors d'évolutions.
Mais nous avons déjà abordé ce sujet ensemble, et c'est encore un autre débat ;)
Citation:
Tu auras peut-être noté le "littéralement" dans mon dernier message. C'est parce que je considère que le RAII n'est pas aussi mal nommé que tous ceux qui en font mention semblent le dire.
Le contrôle de la durée de vie de mes objets est une de mes plus grandes préoccupations. D'ailleurs cette expression serait plus appropriée pour décrire mon approche au RAII. OLTC : Objets LifeTime Control. Pourquoi ? Parce que je me préoccupe autant du moment où mes objets sont créés que du moment ou ils sont détruits, et met un point d'honneur à les initialiser à leur construction.
Et tu as tout à fait raison de le faire.
Cependant, il y a beaucoup plus de risque à mal libérer des ressources qu'il n'y en a à mal les initialiser.
Or, il existe un terme pour parler de l'initialisation et aucun terme pour parler de la libération des ressources, ce qui est franchement dommage, non :question:
Ceci dit, le fait de rapprocher OLTC du RAII est à mon sens une chose des plus saines ;)
Citation:
Ceci signifie notamment que les méthodes init(), start() et autres, sont absolument ignobles à mes yeux. Cela exclue également un paramétrage post-construction (et par là-même me dispense donc de setters) dans un très grand nombre de cas.
La dessus, nous sommes tout à fait d'accord, et depuis longtemps me semble-t-il ;)
Disposer de services qui ont pour résultat la modification de l'objet est sans doute normal, mais tu connais mon point de vue en ce qui concerne les mutateurs ;)
Mais bon, c'est, encore, un autre débat ;)
Citation:
On me pose souvent la question quand je montre un code, on me demande pourquoi j'ai mis plusieurs paires d'accolades à l'intérieur d'une fonction. C'est parce que c'est un élément essentiel qui me permet de contrôler l'ordre de construction et de destruction de mes objets, ainsi que la mémoire avec un degré de précision et de certitude bien plus supérieure, sans pour autant devoir créer une fonction supplémentaire qui prendrait plus de paramètres qu'elle ne serait appelée. Ceci diminue également drastiquement la mémoire utilisée sur la pile.
Je ne te poserais pas la question, car je le fais moi-même...
Mais, ceci dit, quitte à avoir une paire d'accolades, j'aime autant qu'elle entoure une fonction particulière ;)
Citation:
L'une des seules raisons en dehors du DNRY (j'insiste sur le 'N', sans cela ça veut dire strictement le contraire :aie:) qui me pousse à écrire disons un helper privé (je ne sais pas s'il existe un terme approprié pour décrire ça), c'est lorsque j'ai besoin du return (surtout dans une fonction qui retourne void, cela m'arrive très fréquemment). Ça aussi ça fait partie des choses qui étonnent ceux qui lisent mon code. Pourtant c'est également un outils de contrôle très important qui évite moultes complexifications du code. Et seul l'OLTC me garantie que marquer return; au milieu de ma fonction est efficace et surtout sans bug aucun.
Je ne peux qu'approuver, bien sur...
Cependant, quelle différence fais-tu par rapport à SRP :question:
Tu sembles refuser SOLID, car cela te semble "trop stricte", mais, au final, tu semble pourtant appliquer les principes avec une rigueur particulièrement importante ;)
Citation:
C'est également la raison pour laquelle je critique abondamment la syntaxe des flux en C++ puisqu'on est obligé de construire des objets sans pouvoir les initialiser. J'aimerais beaucoup travailler à un proposal pour améliorer ça car sans ce problème les flux seraient d'une qualité et d'un intérêt sans pareil.
Heu, de quels flux parles tu :question:
Pour autant que je sache, tous les flux peuvent être initialisé directement (par contre, aucun n'est copiable, et c'est logique) ;)