Oui, cela est possible. Voici quelques choses à considérer:
- Le module domaine besoins à export the package contenant
Fee
. Peut-être à tout le monde mais au moins to service.
- Le module services devra require domain comme
BalanceCalculatorImpl
doit accessBalanceCalculator
car elle met en œuvre.
- Il ressemble à des clients de services besoin de connaître domaine aussi bien, qui est un cas d'école pour implied readability.
- Dans une configuration simple, soit le service ou un troisième module devront instancier
BalanceCalculatorImpl
et le transmettre à Fee
, cela ne peut se produire dans domaine ou il créerait une dépendance cyclique.
- Une solution plus avancée serait services, où tout le code qui peut accéder
BalanceCalculator
, même à l'intérieur domaine, peut obtenir toutes ses implémentations.
Compte tenu de tous ces compte, voici ce que les deux module declarations pourrait ressembler à:
module com.example.domain {
// likely some requires clauses
// export packages containing Fee and BalanceCalculator
exports com.example.domain.fee;
exports com.example.domain.balance;
}
module com.example.service {
requires public com.example.domain;
// likely some more requires clauses
// expose BalanceCalculatorImpl as a service,
// which makes it unnecessary to export the containing package
provides com.example.domain.balance.BalanceCalculator
with com.example.service.balance.BalanceCalculatorImpl;
}
Ensuite, chaque module qui aime utiliser BalanceCalculator
peut le déclarer dans sa déclaration de module avec uses com.example.domain.balance.BalanceCalculator
et obtenir des instances de cela en utilisant Java's ServiceLoader
.
Vous pouvez trouver des applications plus pratiques du système de module (en particulier pour les services] dans a demo I created
(Note:. La réponse a été révisée après this exchange)
Les travaux autour ou moyen de définir une sorte de. – Franck
En fait, votre arbre est faux Dans le domaine, j'ai une interface appelons-la BalanceCalculator et dans mon service j'ai l'impl, BalanceCalatorImpl.java ..... Suis-je bloqué dans ce – Franck
Pouvez-vous mettre à jour votre question pour inclure cette information - de préférence dans un diagramme. :) – Nicolai