2010-02-18 3 views
2

Tout simplement, il est bien entendu logique de regrouper des parties d'une application dans des modules appropriés.Communication inter-modules

Généralement, la conservation de ces modules n'est pas un problème, mais il arrive souvent que les données d'un module de gestion d'utilisateurs soient requises par d'autres composants. Il est sensiblement moins qu'idéal par les principes normaux que ces modules clients aient connaissance des classes internes du module utilisateur, etc., ce qui m'amène à la question de savoir comment cette communication entre modules est la mieux architecturée. Jusqu'à présent, je pensais qu'un module pouvait avoir une classe d'API nommée de façon conventionnelle par laquelle d'autres modules pouvaient interroger le module. Cette approche conduira toujours à une certaine dépendance, mais au moins uniquement sur l'autre module/son API.

Votre avis sur ce point serait grandement apprécié.

Merci à l'avance, James

Répondre

0

Eh bien, « module » est extrêmement vague - ce exactement définit un module peut varier considérablement d'un système à.

Je suis vraiment confus par exactement quel type de scénario que vous essayez d'éviter. Il n'est pas rare que deux classes ou groupes de classes communiquent entre eux. C'est pourquoi nous avons des choses comme des interfaces en premier lieu. Je suppose que dans votre scénario, vous pourriez avoir une classe de type contrôleur (comme dans le C de MVC) entre vos modules qui connaîtrait le courage de chacun et pourrait servir de pont de communication.

+0

Désolé pour l'ambiguïté! Il s'agit en fait d'une implémentation simple du modèle MVC, et un module encapsule (au moyen d'un répertoire physique) les composants MV et C nécessaires. Ma question dans sa forme brute est donc essentiellement comment un contrôleur dans le module X pourrait communiquer avec un modèle dans le module Y? – jstephenson

+0

Dans ce scénario, je voudrais que le modèle dans X charge le modèle de Y seul. Le contrôleur n'a pas besoin de gérer cette communication. –

+0

Et pour ce qui est de garder les modules découplés les uns des autres, la suggestion de Summer ci-dessus me semble raisonnable. Je pense qu'une combinaison de ces deux pourrait bien fonctionner. Auriez-vous tendance à être d'accord? – jstephenson

2

Vous pouvez appeler le module utilisateur une "bibliothèque". Ce changement de terminologie peut aider à clarifier quels modules sont censés être de niveau supérieur et ceux qui gèrent des activités de niveau inférieur destinées à être utilisées par plusieurs autres modules. Le CodeIgniter PHP framework utilise cette approche.

0

Vous voudrez peut-être lire «injection de dépendance». Symfony Components offre une solution pour l'injection de dépendance et a beaucoup de bonnes lectures/exemples sur le sujet.

+0

Merci pour votre contribution. J'avais brièvement examiné une solution basée sur un conteneur DI, mais pour le faire correctement, il faudrait que le contrôleur de mappage de données X soit conforme à une interface typable, et il y a ensuite la question de savoir où cette interface devrait vivre dans l'application/module de l'écosystème (j'espère que cela a du sens ...)? – jstephenson