«Trop orienté objet»

21

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.

ThuneGrill
la source
17
Quel est ton rôle? Développeur Grunt? Vous êtes foutu - obtenez un meilleur travail. Développeur principal? Vous pourrez peut-être faire la différence ...
Matthew Flynn
2
Pas tant la dette technologique que le traitement d'un design médiocre et de personnes qui ne changeront pas
ozz
1
Je suis conscient des arguments techniques et commerciaux, je demande comment transmettre au mieux ces connaissances à mes collègues qui semblent ne pas en être conscients. Ils voient beaucoup de classes, je vois un système extensible testable
ThuneGrill
5
Désolé, vous devez partir. Vous parlez par-dessus la tête de vos collègues. Cela ne changera pas tant que le projet ne sera pas maintenable. Si vous n'aimez pas les tests manuels et les marches de la mort, vous feriez mieux d'aller ailleurs.
kevin cline
4
Sans voir le code en question (oui, il est difficile de fournir un échantillon suffisamment bon, nous devons donc simplement faire confiance à votre jugement ici), il est difficile de dire s'il y a effectivement un manque d'OO, ou si vous poussez sur une cargaison surdimensionnée Abtractions OO sans raison valable. Je pense que tout le monde a vu des exemples de POO sur-conçus, où les abstractions reposent sur une couche d'usines abstraites produisant des usines abstraites, etc.
Kromster dit qu'elle prend en charge Monica

Réponses:

32

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.

Tout le monde est un génie. Mais si vous jugez un poisson par sa capacité à grimper à un arbre, il vivra toute sa vie en croyant qu'il est stupide. - Albert Einstein

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.

Karl Bielefeldt
la source
3
c'est procédural et désordonné. Mais je parle du nouveau code que j'écris étant appelé "trop ​​orienté objet"
ThuneGrill
5
un code de procédure désordonné étendu avec du code OO pourrait ne pas être une amélioration après tout, ajoutant simplement de la confusion.
wirrbel
7
@ThuneGrill, vous supposez qu'ils ont choisi leur style de codage par ignorance de la conception orientée objet, que si vous pouviez simplement les éduquer, ils verraient la lumière. Si quelqu'un avec une entreprise de logiciels rentable dans un langage fortement orienté objet n'a pas examiné les avantages d'OOD à ce jour, il n'y a aucun moyen que le "nouveau mec" puisse le convaincre. Prenez ma parole et la parole des autres commentateurs. Si vous ne pouvez pas ou ne voulez pas ajuster votre style pour faciliter la lecture par l'équipe, vous devez réduire vos pertes.
Karl Bielefeldt
3
@ThuneGrill: Karl a raison. Tenez-vous à des raisons pragmatiques, pas religieuses. La POO est certainement une bonne idée, mais je l'ai vue portée à des extrêmes ridicules. Le résultat fait des montagnes des taupinières. Les choses qui pourraient être faites dans 1000 lignes de code finissent par être 10 000 lignes de code avec des classes à gogo. Ensuite, Gee, c'est difficile à maintenir et les performances sont nulles. (Peu importe les classes de collecte utilisées.)
Mike Dunlavey
1
Je n'abandonnerais pas nécessairement l'idée que vous pouvez convaincre les gens sur celui-ci. C'est difficile, mais cela peut être fait - je l'ai fait. Étant donné que cette question semble fermée, voir lieu de travail.stackexchange.com/questions/9703/…
Amy Blankenship
7

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:

Vous pouvez être dans une situation où vous savez exactement ce qui doit être fait et comment le faire. Le système entier apparaît juste sous vos yeux - vous savez qu'il a raison. Mais demandez la permission d'aborder le tout et vous serez confronté à des retards et à des regards vides. Les gens formeront des comités, les budgets devront être approuvés et les choses se compliqueront. Chacun gardera ses propres ressources. Parfois, cela s'appelle la «fatigue au démarrage».

Il est temps de faire cuire la soupe aux pierres. Déterminez ce que vous pouvez raisonnablement demander. Développez-le bien. Une fois que vous l'avez, montrez aux gens et laissez-les s'émerveiller. Ensuite, dites "bien sûr, ce serait mieux si nous ajoutions…". Imaginez que ce n'est pas important. Asseyez-vous et attendez qu'ils commencent à vous demander d'ajouter la fonctionnalité que vous vouliez à l'origine. Les gens trouvent plus facile de rejoindre un succès continu. Montrez-leur un aperçu de l'avenir et faites-les se rallier.

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.

Rodrigo
la source
Essayer d'être, mais l'uber-architecte (qui ne code pas) n'en aura rien.
ThuneGrill
Dès qu'il remarque les avantages du TDD et une meilleure OO (fiabilité, productivité, ...), vous capterez votre attention!
Rodrigo
3

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.

Pieter B
la source
1

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.

Jon Raynor
la source
1
Je viens de le faire, c'est ce qui a provoqué toute la discussion. Et je n'ai introduit que 3-4 abstractions en plus des fonctionnalités existantes
ThuneGrill