1

私のプロジェクト (ASP.NET MVC を使用) には、AuthenticationService と ProfileService の 2 つのクラスがあります。新しいユーザーが私のサイトに登録すると、認証コントローラーの Register アクションが IAuthenticationService の Register メソッドを呼び出します。これにより、インターフェイスが参照している (コントローラーのコンストラクターに挿入された) 具体的な認証モジュールに従って、ユーザーの認証レコードが作成されます。登録プロセスの一部として、ユーザーのプロファイル レコードが作成されます。これは、挿入された IProfileService で CreateProfile(User) を呼び出すことによって作成されます。

現時点では、コントローラーは両方のサービスを呼び出していますが、コントローラーが実行するビジネス ロジックをできるだけ少なくするというアイデアが気に入っています。認証サービスにプロファイル サービスについて知らせる以外に、他のオプションがあるかどうか疑問に思っています。これには、IAuthenticationService の将来の実装で、CreateProfile を呼び出すことを知る必要がありますか? コードの匂いが随所に書かれていると感じずにはいられません。

もう 1 つの可能性は、{I​​,}RegistrationService という 3 番目のサービスにロジックを任せることです。

この状況を処理するための推奨または推奨される方法は何ですか? ありがとう

4

3 に答える 3

0

私は3番目のアプローチが好きです。私のアプリでは、コントローラーがタスクを実行するために複数のドメイン レベルのサービスを必要とし、コードがコントローラーに対して少し冗長になるという同様の状況があります。特に、写真のアップロードを可能にするイベント管理システムがあります。リポジトリと IAuthService に加えて、物理ストレージは IFileSystem (ローカルと S3 を切り替えることができます)、IThumbnailer による画像操作、IBackgroundTask によるスイープ/クリーンアップによって処理されます。

私が始めたのは、責任を処理するためにドメイン サービスに加えてアプリケーション サービスを作成することです。これにより、コンテナーは主にアプリ サービスでのみ注入されます (この場合はオプション 3)。

于 2009-10-20T23:15:02.873 に答える
0

IAuthenticationService および IProfile サービスに依存する {I}RegistrationService を使用します。

原則として、コントローラーごとに単一のサービス依存関係を持つことを目指しています

于 2009-10-20T23:18:33.807 に答える
0

コントローラーがユーザーの登録とプロファイルの作成を担当している場合、どうすればよいでしょうか? コントローラーが複数のサービスを呼び出すことは問題ありません。コントローラーは目的を果たし、非常に細かくする必要はありません。

ただし、認証とプロファイルへのインターフェイス参照を使用する一般的な登録用の 3 番目のコントローラーを作成することは、おそらくより良いルートです。その場合、認証とプロファイルは結合されません。

于 2009-10-20T23:18:35.200 に答える