web-dev-qa-db-fra.com

"Trop orienté objet"

Je viens d'un fort OO Contexte, et j'ai récemment commencé à travailler dans une organisation qui, bien que le code soit écrit en Java, a beaucoup moins d'emphase sur Good OO Design que ce que je suis habitué à ce que je suis habitué. On m'a dit que je présennes "trop ​​d'abstraction" et que je devrais plutôt coder la façon dont il a toujours été fait, ce qui est un style de procédure en Java.

TDD n'est également pas très pratiqué ici, mais je veux avoir un code testtable. Enracinez la logique commerciale dans des méthodes privées statiques dans de grandes "classes de dieu" (ce qui semble être la norme pour cette équipe) n'est pas très testable.

Je lutterai pour communiquer clairement ma motivation à mes collègues. Quelqu'un a-t-il des conseils sur la façon dont je peux convaincre mes collègues qu'en utilisant OO et TDD conduit à un code plus facilement maintenu?

Cette question sur la dette technique est liée à ma question. Cependant, j'essaie de éviter entraînant la dette en premier lieu, par opposition à la payer après le fait qui est ce que l'autre question couvre.

21
ThuneGrill

Lisez votre question, je me suis souvenu d'une partie du programmateur pragmatique de livre.

Un de ses conseils est Be a Catalyst for Change:

Vous pouvez être dans une situation où vous savez exactement ce qui doit faire et comment le faire. L'ensemble du système apparaît juste avant vos yeux - vous savez que c'est raison. Mais demandez la permission de faire face au tout et vous serez rencontré de retards et de regards vides. Les gens formeront des comités, les budgets auront besoin d'approbation et les choses seront compliquées. Tout le monde garde ses propres ressources. Parfois, cela s'appelle "Fatigue de démarrage".

Il est temps de cuire la soupe en pierre. Travaillez ce que vous pouvez raisonnablement demander. Le développer bien. Une fois que vous l'avez, montrez aux gens et laissez-les émerveiller. Ensuite, disons "bien sûr, ce serait mieux si nous avons ajouté ..." Prétendre que ce n'est pas important. Asseyez-vous et attendez qu'ils commencent à vous demander d'ajouter les fonctionnalités 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 vous les obtiendrez à votre rallye.

Donc, je pense que si vous commencez à faire un bon travail avec votre OO et TDD Connaissances, ils commenceront bientôt à regarder et à poser des questions sur votre travail.

7
Rodrigo

Pour vendre de nouvelles façons de travailler, vous devez montrer des avantages évidents. Écrire plus de couches d'abstraction, sans un avantage clair, mais un vague: "Cela peut être bénéfique pour l'avenir" ne fonctionnera pas.

Fabriquez des usines où les usines font plus d'un type d'objet. Utilisez une injection de dépendance, où elle montre immédiatement des avantages. Faites des interfaces qui vont réellement être implémentées par plus d'une classe.

Ce que je vois trop souvent dans "vrai oo", c'est que des techniques avancées sont utilisées pour résoudre des problèmes vraiment simples de manière trop complexe.

Comment pouvez-vous montrer l'avantage d'une usine si cela ne va jamais faire le même objet? Trouvez un problème dans votre code qui bénéficie de techniques avancées et montre votre point et travaillez à partir de là.

Les guerres sont remportées une bataille à la fois.

3
Pieter B

Vous ne pouvez les convaincre qu'en prenant un petit morceau de code et en mettant en œuvre TDD et mieux OO pratiques pour réaliser les avantages. Vous les avez conduits à la terre promise, pas seulement montrer à la vente cartes de celui-ci.

Certes, je pense qu'il existe des cas d'abstraction utilisées dans de nombreuses bases de code aujourd'hui. Seulement mettre dans ce dont vous avez besoin et cela inclut des abstractions également.

1
Jon Raynor