春にサービスまたはコンポーネントを使用する場合
たとえば、電子メールまたは一般的なビジネスロジックを「サービス」または「コンポーネント」に送信するモジュールはありますか?そして違いは何ですか?
サービスは他のサービスを呼び出すことができますか?トランザクションの問題はありますか?またはサービスはコンポーネントのみを呼び出す必要がありますか?
サービスは他のサービスを呼び出さないで、代わりにコンポーネントのみを呼び出す必要があると誰かに言われました。つまり、Controller-> Service-> Component-> DAOを意味しますが、多くの人がController-> Service-> DAOの概念を共有していますコンポーネントなし。
Springでこのトピックに関するシステム設計基準はありますか?
必要なクラスのインスタンスを提供できるようにSpringを「構成」するには、Springwhatオブジェクトが関係していることとhowが構築されます。これを行うには、xml構成ファイルを使用するか、アノテーションを使用します
アノテーションアプローチを採用する場合(IMHOの方がはるかに優れたシンプルなアプローチ)、@Component
クラスに注釈を付けます。これは、Springに「ねえ!このクラスのインスタンスが必要になるかもしれないことを知ってほしい。たぶん私がそれを要求したからかもしれない。クラスに注釈を付ける@Component
ただそれが存在することをSpringに知らせる
同じことを行う他の注釈があります。
@Controller
(および@RestController
)@Service
@Repository
それらはすべて、クラスがDIコンテキストに関与していることをSpringに通知します。 しかし、には意味的な意味もあります:
@Controller
= @Component
プレゼンテーション層に属する@Service
= @Component
サービス/ユースケースレイヤーに属する@Repository
= @Component
永続層に属する詳しくは この質問 をご覧ください。
サービスは他のサービスを呼び出すことができますか?
私はそれについて何の問題も見ていません。いずれかのサービスで他のユーザーが既に実行しているアクションを実行する必要がある場合は、コードの重複を避けてください。アーキテクチャレイヤーの依存関係を尊重する限り(上に上がらないように)、問題ありません。
これについては、 この記事 Clean Architectureについて確認できます
@Component
は、他のステレオタイプの汎用です。
だから、@Repository, @Service, @Controller
を@Component
に置き換えることができ、何も変わりません。ただし、読みやすくするには、@Repository, @Service, @Controller
を使用する必要があります