MVC architecture and custom membershipProvider
===

Thank you for any thoughts.

I am trying to learn about MVC architecture, and working on a small project which is as much about me learning the tool than the requirements of the project.

I need  to figure out what constitutes good, acceptable, and poor practice, and why. I fully understand there will be no specific right answer, but there must be architectures which fit into any of the spectrum of good -> terrible. While in a sense more than a single question, I hope the logical flow of good design practice means they all relate back to a single encapsulating answer.

I m using [Code First Membership provider][1] by Darko Pečnik

User implements an interface IUser which hides many of the properties such as Primary key and password, which should be accessed/altered via the methods belonging to Membership class. It also uses a getter and setter for an array of strings rather than the User.Roles Collection via:
 

    public virtual String[] RoleNames
     { set { this.Roles = (ICollection<Role>)value.Select(r => new Role { RoleName = r }).ToList();

Question 1.) I suspect this property might be bad practice, but am unsure of exactly why. Would these be better as methods GetRoleNames and SetRoleNames, or would the Icollection itself be better included in the IUser interface?

Two seperate viewModels exist which are mapped from IUser using AutoMapper. These models relate to whether the user is registering/updating details about them-self, or being registered/updated by a website administrator.

one viewModel contains an IEnumerable<SelectListItem> for roles and departments. these properties are currently being mapped via automapper:

    internal class RoleStringArrayToSelectListResolver : ValueResolver<String[], IEnumerable<SelectListItem>>{
        protected override IEnumerable<SelectListItem> ResolveCore(String[] source) 
        {
            return Roles.GetAllRoles().Select(x => new SelectListItem 
            {
                Value = x, Text = StringExtensions.ToSeparatedWords(x),Selected = source.Contains(x)

Question 2.) Is autoMapper an acceptable place to put such logic, and if not where should it go?

Question 3.) After postback, business logic is validated via repository methods createUser and updateUser. Would it be optimal for these methods to accept an IUser instance as an argument, or preferable for a couple of overloads accepting the various viewModels as arguments, and if so why?

Thank you very much for any thought ideas and helping my understanding.

  [1]: http://codefirstmembership.codeplex.com/