Профиль и членствоПользовательский комплексный вид модели дизайна - PullRequest
1 голос
/ 07 марта 2012

У меня есть часть моего веб-приложения mvc 3, где мне нужно разрешить пользователям (в данном случае администраторам) управлять пользователями.Администратор сможет редактировать информацию о профиле пользователя, а также некоторые свойства членства .NET, такие как UserName, Email, IsLockedOut.Часть, с которой я борюсь, состоит в том, как лучше всего обернуть все это в пользовательскую модель.

В настоящее время у меня есть объект Profile, подобный так:

 public class Profile
    {
        public int ProfileID { get; set; }
        public Guid UserID { get; set; }  // link to membership user ID
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Phone { get; set; }
    }

Моей первой мыслью было сделать что-то вроде этого:

public class ProfileUser
    {
        public ProfileUser(Profile profile)
        {
            Profile = profile;
            User = Membership.GetUser(profile.UserID);
        }

        public Profile Profile { get; set; }
        public MembershipUser User { get; set; }
    }

Но так как некоторые поля читаютсятолько в классе MembershipUser я не смог бы напрямую передать модель обратно в контроллер с новыми значениями для поля UserName или IsLockedOut для обновления базы данных.

Тогда я подумал о том, чтобы просто сделать обертку для обоих классов как один класс:

public class ProfileUser : Profile
{
    public ProfileUser(Profile profile)
    {
        this.ProfileID = profile.ProfileID;
        this.UserID = profile.UserID;
        this.FirstName = profile.FirstName;
        this.LastName = profile.LastName;
        this.Phone = profile.Phone;
    }

    private string userName;
    public string UserName
    {
        get
        {
            if (userName == null)
            {
                userName = Membership.GetUser(this.UserID).UserName;
            }
            return userName;
        }
        set
        {
            userName = value;
        }
    }

    private string email;
    public string Email
    {
        get
        {
            if (email == null)
            {
                email = Membership.GetUser(this.UserID).Email;
            }
            return email;
        }
        set
        {
            email = value;
        }
    }

    private bool? isLockedOut;
    public bool? IsLockedOut
    {
        get
        {
            if (isLockedOut == null)
            {
                isLockedOut = Membership.GetUser(this.UserID).IsLockedOut;
            }
            return isLockedOut;
        }
        set
        {
            isLockedOut = value;
        }
    }
}

Если я сделаю это таким образом, я смогу передать значения, когда администратор ввел их обратно вмодели и делаю все возможное, чтобы обновить эти поля только для чтения в БД, но я не уверен, что я реализую этот класс наилучшим образом.

Отказ от ответственности : Я понимаю, что лучший путь - это, вероятно, сделать пользовательское членство или поставщика профиля, но по причинам, не зависящим от меня, я не могу пойти по этому пути.Во всех этих примерах я буду извлекать объект профиля из БД, к которой уже будет привязан идентификатор пользователя из их записи о членстве.

Будем весьма благодарны за любые указания по этому вопросу.Заранее спасибо, что нашли время помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...