こんにちは、私はリポジトリパターンが新しくなっています。私が従っているアプローチについてのフィードバックがありたいと思います。共通アイテム用のリポジトリパターン
要件:現在ログインしているユーザーのためのメニューを構築
マイソリューション:
私は、メニュー項目を取得するために、コントローラによって呼び出されるサービスを、作成しました。
public interface IApplicationHelperService { List<Menu> GetMenuForRoles(); }
サービス
public class ApplicationHelperService : IApplicationHelperService { private readonly IMenuRepository _menuRepository; //this fecthes the entire menu from the datastore private readonly ICommonService _commonService; //this is a Service that contained common items eg. UserDetails, ApplicationName etc. public ApplicationHelperService(IMenuRepository menuRepository,ICommonService commonService) { this._menuRepository = menuRepository; this._commonService = commonService; } public List<Menu> ApplicationMenu { get { return _menuRepository.GetMenu(_commonService.ApplicationName); } } List<Menu> IApplicationHelperService.GetMenuForRoles() { return ApplicationMenu.Where(p => p.ParentID == null && p.IsInRole(_commonService.CurrentUser.Roles)).OrderBy(p => p.MenuOrder).ToList(); } }
の実装次にCommonServiceは(例えばサービスに必要な一般的なアイテムに使用。クラスであるCurrentUser
public interface ICommonService { IUser CurrentUser { get; } string ApplicationName { get; } }
ICommonServiceを実装します。私は現在のユーザーにコンテキストを使用させます。 ds私のサービス層はHttpContextについて知りませんが、これは将来他のタイプのアプリケーションに使用される可能性があるためです。このように、私は現在のユーザーがすべてのアプリケーションを扱うことができますが、私のサービス層は気にしません。
だから、このアプローチは、このような共通サービスをすべてのサービスに良いアプローチで注入するか、これを行う別の方法です。私が尋ねる理由は、後の段階です。何らかの理由で監査目的のために現在のユーザーの詳細が必要です。
これは誰かにとって理にかなっていると思います。 :-)
私はWCFサービスを使用することに疑いがあります。パラメータの渡しについては、私はこれが必要であるとは思わない。これは静的なクラスのアプローチです。私は基本クラスを調べます... – Captain0
答えに言及するのを忘れましたが、サービスクラスで複数のリポジトリを解決する必要がある場合は、トランザクションのすべてのリポジトリの変更を保存するために、UnitOfWorkパターンも使用する必要があります。 – daryal