2010-09-01 9 views
2

Mon patron se considère comme un gourou de l'OOP où je le considère comme un programmeur amateur. Il gère notre développement Sage, en ajoutant des exigences personnalisées aux installations de nos clients. Il a récemment été très enthousiasmé par la réflexion, il réfléchit sur les assemblées de Sage dans le code et change les membres privés et les gestionnaires d'événements. Je pensais que ce n'était pas une bonne idée mais il m'a abattu en disant que Sage pensait qu'il était incroyable qu'il puisse le faire. Je croyais que c'était une mauvaise pratique parce que c'était inefficace et parce que si elles changeaient leur implémentation à tout moment, notre code pourrait s'effondrer. Je veux dire habituellement qu'un développeur a fait quelque chose de privé pour une bonne raison?Utiliser la réflexion pour changer la mise en œuvre

Quelle est la règle générale à ce sujet?

Merci beaucoup et excuses si cela semble être une question stupide.

Paul

+1

Eh bien cela dépend de la façon dont tous merdiques (ou bien) l'API Sage est. . Parfois, vous êtes obligé de faire des choses idiotes. – leppie

+6

son abus de réflexion * légèrement * contredit le titre OOP Guru. – Andrey

+0

@Andrey: +100 pour ce commentaire! – Steven

Répondre

4

Vous avez raison. Si vous dépendez des détails d'implémentation d'une bibliothèque tierce, il vaut mieux être prêt à réécrire tout lorsque la bibliothèque tierce est mise à jour et pour les effets secondaires inattendus lorsque vous modifiez une variable privée avec une valeur "innocente". La réponse est le faire seulement si vous êtes sûr à 100% de ce que vous faites et vous êtes prêt à affronter les conséquences.

2

Vous ne devriez pas modifier les assemblages existants - les résultats sont susceptibles d'être inconnus et certainement pas pris en charge par le fournisseur de l'assemblage. En outre, de telles modifications perdront la signature de l'assemblage qui garantit que l'assemblage est la version fournie par le fournisseur. Fondamentalement, tout peut arriver, donc à moins que vous ne soyez prêt à faire très des tests rigoureux, sans le soutien des fournisseurs pour se rabattre sur, restez bien loin!

1

Chaque nouvelle version d'un assemblage peut avoir une implémentation complètement différente. Une mise à jour de logiciel de Sage pourrait complètement invalider le code de votre patron, et nécessiterait un réaménagement complet pour rétablir la même fonctionnalité.

Pour un exemple concret: StringBuilder dans .NET 3.5 utilisé un string interne, .NET 4, il utilise un char[] voir ce recent question)

+0

Merci pour la réponse et le lien vers l'autre poste, appris quelque chose d'autre aujourd'hui :) –