はい、可能です。考慮すべき点は次のとおりです。
- モジュールドメインは、を含むパッケージをエクスポートする必要があります
Fee
。おそらく誰にでも、少なくともサービスには。
- モジュールサービスは、ドメインを実装しているため、アクセスする必要があるため、ドメインを要求する必要があります。
BalanceCalculatorImpl
BalanceCalculator
- サービスのクライアントはドメインについても知る必要があるようです。これは暗黙の読みやすさの教科書的なケースです。
- 単純なセットアップでは、サービスまたはいくつかの 3 番目のモジュールのいずれかがインスタンス化
BalanceCalculatorImpl
して に渡す必要があります。これはドメインFee
では発生しないか、循環的な依存関係が作成されます。
- より高度なソリューションはservicesであり、 domain
BalanceCalculator
内であっても、 にアクセスできるすべてのコードがそのすべての実装を保持できます。
これらすべてを考慮すると、2 つのモジュール宣言は次のようになります。
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;
}
次に、使用するのが好きなすべてのモジュールBalanceCalculator
は、モジュール宣言でそれを宣言し、 Java のuses com.example.domain.balance.BalanceCalculator
を使用してそのインスタンスを取得できます。ServiceLoader
モジュール システムのより実用的なアプリケーション (特にサービス用) は、私が作成したデモで見つけることができます。
(注:このやり取りの後、回答が修正されました。)