В каком слое я должен разместить метод для возврата информации о текущем пользователе? - PullRequest
0 голосов
/ 19 марта 2012

У меня есть многоуровневое приложение. Я пытаюсь определить, где разместить метод, который возвращает объект, заполненный информацией об активном пользователе. Слои:

  1. Уровень доступа к данным (Entity Framework)
  2. Уровень домена (POCO)
  3. Уровень пользовательского интерфейса (веб, мобильный и Windows)

В каком слое я должен разместить метод? Это метод:

    internal static User ActiveUser()
    {
        var name = System.Threading.Thread.CurrentPrincipal.Identity.Name;
        if (string.IsNullOrEmpty(name))
        {
            return null;
        }
        else
        {
            using (EfContext db = new EfContext())
            {
                return db.Users.Single(u => u.UserName.ToLower().Equals(name.ToLower()));
            }
        }
    }

1 Ответ

0 голосов
/ 20 марта 2012

Мой ответ будет таким: «метод» не должен существовать. По крайней мере, не так, как сейчас. Получение имени CurrentPrincipal может быть функцией вашего домена (доменной службы) или отдельной службы приложений, а не DAL.

Но EfContext не должен быть видимым для Домена, тем более для пользовательского интерфейса. Обычной практикой является инкапсуляция в хранилище.

Таким образом, ваш домен / служба приложений могут «запросить» у вашего хранилища имя User по имени.

public User GetUser(string name)
{
    using (EfContext db = new EfContext())
    ....
}
...