Witam, jestem nowy w strukturze repozytorium. Chciałbym uzyskać opinię na temat podejścia, które podążam.Wzór repozytorium dla zwykłych przedmiotów
Wymagania:. Budowanie menu dla użytkownika, który jest aktualnie zalogowany w
Moje rozwiązanie:
I stworzył usługę, która zostanie wywołana przez kontrolera, aby uzyskać pozycje menu.
public interface IApplicationHelperService { List<Menu> GetMenuForRoles(); }
Implementacja usługi
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(); } }
wtedy CommonService (używany do wspólnych elementów potrzebnych w Usług np. CurrentUser
public interface ICommonService { IUser CurrentUser { get; } string ApplicationName { get; } }
W klasie implementuje ICommonService, otrzymuję bieżącego użytkownika za pomocą kontekstu, w innym wor ds moja warstwa usług nie wie o HttpContext, ponieważ istnieje możliwość, że może to być użyte do innego typu aplikacji w przyszłości. W ten sposób mogę obsłużyć bieżącego użytkownika inaczej dla wszystkich aplikacji, ale moja Warstwa Usług nie będzie miała nic przeciwko.
To, co powinieneś przekazać swoją opinię, brzmi: czy to podejście do wprowadzania tego rodzaju wspólnej usługi do wszystkich usług jest dobrym podejściem, czy jest inny sposób robienia tego, powód, dla którego pytam, jest na późniejszym etapie. potrzebować szczegółów bieżącego użytkownika do celów audytu lub z jakiegokolwiek powodu sam się przedstawia.
Mam nadzieję, że to ma sens dla kogoś. :-)
Wątpię, czy będziemy używać usługi WCF. O przejściu parametrów, wątpię, że powinno być tego potrzeba. Jest to bardziej podejście "klasy statycznej". Zajrzę jednak do klasy bazowej ... – Captain0
Zapomniałem wspomnieć w odpowiedzi, ale jeśli kiedykolwiek zajdzie potrzeba rozwiązania więcej niż jednego repozytorium w klasie usług; być może będziesz musiał również użyć wzorca UnitOfWork, aby zapisać zmiany we wszystkich repozytoriach transakcji. – daryal