web-dev-qa-db-ja.com

春にサービスまたはコンポーネントを使用する場合

春にサービスまたはコンポーネントを使用する場合

たとえば、電子メールまたは一般的なビジネスロジックを「サービス」または「コンポーネント」に送信するモジュールはありますか?そして違いは何ですか?

サービスは他のサービスを呼び出すことができますか?トランザクションの問題はありますか?またはサービスはコンポーネントのみを呼び出す必要がありますか?

サービスは他のサービスを呼び出さないで、代わりにコンポーネントのみを呼び出す必要があると誰かに言われました。つまり、Controller-> Service-> Component-> DAOを意味しますが、多くの人がController-> Service-> DAOの概念を共有していますコンポーネントなし。

Springでこのトピックに関するシステム設計基準はありますか?

10
ChiaChih wu

必要なクラスのインスタンスを提供できるようにSpringを「構成」するには、Springwhatオブジェクトが関係していることとhowが構築されます。これを行うには、xml構成ファイルを使用するか、アノテーションを使用します

アノテーションアプローチを採用する場合(IMHOの方がはるかに優れたシンプルなアプローチ)、@Componentクラスに注釈を付けます。これは、Springに「ねえ!このクラスのインスタンスが必要になるかもしれないことを知ってほしい。たぶん私がそれを要求したからかもしれない。クラスに注釈を付ける@Componentただそれが存在することをSpringに知らせる

同じことを行う他の注釈があります。

  • @Controller(および@RestController
  • @Service
  • @Repository

それらはすべて、クラスがDIコンテキストに関与していることをSpringに通知します。 しかし、には意味的な意味もあります:

  • @Controller = @Componentプレゼンテーション層に属する
  • @Service = @Componentサービス/ユースケースレイヤーに属する
  • @Repository = @Component永続層に属する

詳しくは この質問 をご覧ください。

サービスは他のサービスを呼び出すことができますか?

私はそれについて何の問題も見ていません。いずれかのサービスで他のユーザーが既に実行しているアクションを実行する必要がある場合は、コードの重複を避けてください。アーキテクチャレイヤーの依存関係を尊重する限り(上に上がらないように)、問題ありません。

これについては、 この記事 Clean Architectureについて確認できます

17
Pelocho

@Componentは、他のステレオタイプの汎用です。
だから、@Repository, @Service, @Controller@Componentに置き換えることができ、何も変わりません。ただし、読みやすくするには、@Repository, @Service, @Controllerを使用する必要があります

3
Roman Danilov