Je viens d'un milieu OO solide et j'ai récemment commencé à travailler dans une organisation qui, bien que le code soit écrit en Java, met beaucoup moins l'accent sur une bonne conception OO que ce à quoi je suis habitué. On m'a dit que j'introduisais "trop d'abstraction" et que je devrais plutôt coder comme cela a toujours été fait, qui est un style procédural en Java.
TDD n'est pas non plus très pratiqué ici, mais je veux avoir du code testable. Enterrer la logique métier dans les méthodes privées statiques dans les grandes "classes divines" (qui semble être la norme pour cette équipe) n'est pas très testable.
J'ai du mal à communiquer clairement ma motivation à mes collègues. Quelqu'un a-t-il des conseils sur la façon de convaincre mes collègues que l'utilisation d'OO et de TDD permet de gérer plus facilement le code?
Cette question sur la dette technique est liée à ma question. Cependant, j'essaie d' éviter de contracter la dette en premier lieu, plutôt que de la rembourser après coup, ce que recouvre l'autre question.
la source
Réponses:
Vous ne vous êtes pas plaint que ce soit irréalisable, mais pas à votre goût. S'il s'agit d'un choix de style délibéré, il peut simplement s'agir de différences créatives irréconciliables, et vous devez ajuster votre style pour l'adapter, ou trouver un endroit qui correspond à votre style préféré.
Les gens peuvent et écrivent du code modulaire, efficace, bien résumé et relativement exempt de bogues dans un style procédural tout le temps. Java est un choix étrange de langue pour une telle boutique, mais je peux le voir se produire si des facteurs externes décident de la langue, comme le besoin de développer pour Android, par exemple.
Si ce fut un choix délibéré, vous ne pouvez pas vraiment les juger par la façon dont ils adhèrent aux principes de conception bien orientés objet, vous devez juger par la façon dont ils adhèrent aux principes de bonne conception de procédure, ainsi que refactor en conséquence. Java ne vous permet pas d'écrire du code en dehors d'une classe, donc la simple présence d'une ne signifie pas qu'ils voulaient qu'un module soit orienté objet.
D'un autre côté, si le code est un gâchis dans l'un ou l'autre paradigme, vous devriez probablement simplement réduire vos pertes.
la source
En lisant votre question, je me suis souvenu d'une astuce de livre Pragmatic Programmer.
Un de ses conseils est
Be a Catalyst for Change
:Donc, je pense que si vous commencez à faire du bon travail avec vos connaissances OO et TDD, ils commenceront bientôt à chercher et à poser des questions sur votre travail.
la source
Pour vendre de nouvelles façons de travailler, vous devez montrer des avantages évidents. Écrire plus de couches d'abstraction, sans bénéfice clair mais vague: «ça peut être bénéfique pour l'avenir» ne fonctionnera pas.
Faites des usines où les usines fabriquent plus d'un type d'objet. Utilisez l'injection de dépendance, où elle montre immédiatement des avantages. Créez des interfaces qui seront réellement implémentées par plus d'une classe.
Ce que je vois trop souvent dans "true OO", c'est que des techniques avancées sont utilisées pour résoudre des problèmes très simples d'une manière trop complexe.
Comment pouvez-vous montrer les avantages d'une usine si elle ne fabrique que le même objet? Trouvez un problème dans votre code qui bénéficie de techniques avancées et montre votre point et votre travail à partir de là.
Les guerres sont gagnées une bataille à la fois.
la source
Vous ne pouvez les convaincre qu'en prenant un petit morceau de code et en implémentant TDD et de meilleures pratiques OO dessus pour en tirer les avantages. Vous les avez conduits vers la terre promise, pas seulement en montrant de belles cartes postales.
Certes, je pense qu'il y a des cas de sur-abstraction utilisés dans de nombreuses bases de code aujourd'hui. Ne mettez que ce dont vous avez besoin, et cela inclut également les abstractions.
la source