2008-11-03 13 views
2

Scénario:Techniques pour supprimer les dépendances?

Un événement est soulevée dans la classe A qui doit être traitée par un procédé en classe B. (actuellement par l'intermédiaire d'un délégué)

Les données qui est transmis à partir de l'événement la méthode est actuellement en classe C. enveloppées
Cela nécessite évidemment la classe B à dépendre de la classe C.

y at-il des techniques/refactoring que je peux effectuer afin de re déplacer cette dépendance?
par exemple. dérouler les données à des types de données primitifs simples et les transmettre directement.

Répondre

5

aux primitives se déroulant travailler, mais être certain que vous voulez vraiment supprimer cette dépendance. Il est parfaitement valide pour les classes A et B de dépendre de C si C est un pont entre elles, ou si C les nourrit toutes les deux, etc.

le déroulement des primitives supprime une dépendance de compilation, mais pas une dépendance de données, et peut être en train de "dénormaliser" la conception en supprimant une entité (classe C) qui est logiquement requise

-2

Vous pouvez sérialiser en XML, et que de lire directement le XML via XPath (sans désérialisation)

2

Je suis d'accord avec Steven Lowe; La dépendance est probablement valide. La seule alternative que je peux proposer est de dépendre d'une interface au lieu d'une classe réelle, mais cela revient à peu près à la même chose.

+0

Toujours coder sur une interface, en fonction de l'interface au lieu de l'implémentation réelle améliore la flexibilité globale et la testabilité. – Tigraine

0

Comme la plupart des autres l'ont dit, la dépendance à l'égard de C est probablement valide. Toutefois, si C dépend de vous, cela peut être dû au fait que C est trop compliqué ou qu'il comporte trop de dépendances.

Si la classe C est transmise dans un événement, il devrait s'agir probablement d'une classe POCO sans dépendance propre, vous pouvez donc envisager de la refactoriser.

Si C a des méthodes compliquées de lui-même, il est un bon pari qu'ils appartiennent effectivement à la classe A.

0

Avez-vous regardé dépendance des cadres d'injection comme Structuremap pour centraliser au moins ces dépendances et les rendre configurable? Je ne l'ai pas essayé avec des types d'événements/délégués, mais c'est un excellent outil si vous passez beaucoup de types/interfaces personnalisés autour de vos couches.

Questions connexes