+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre chevronné
    Avatar de topolino
    Profil pro
    Inscrit en
    juillet 2003
    Messages
    1 845
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : juillet 2003
    Messages : 1 845
    Points : 610
    Points
    610

    Par défaut Conception - Utilisateur

    Bonjour,

    J'ai besoin de votre avis pour savoir si je vais bien dans la bonne direction.
    Voila, j'ai 3 types d'utilisateur (SimpleUser, ClientUser, AdminUser) dans mon application avec des action differentes, et cela est determiné au login de la personne.

    SimpleUser peut lire les infos
    ClientUser peut lire et ecrire les infos
    AdminUser peut lire, ecrire et effacer les infos

    Voila ce que je propose dans mon domain model de ma couche business:

    Enum User
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public enum UserType
        {
            SimpleUser = 0,
            ClientUser = 1,
            AdminUser = 2
        }
    interface IUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public interface IUser
        {
            int Id { get; set; }
            string Name { get; set; }
            void ReadInfo();
            void WriteInfo();
            void DeleteInfo();
        }
    User
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public class User : IUser
        {
     
            public int Id { get; set; }
            public string Name { get; set; }
     
            public User(string name)
            {
                Name = name;
            }
     
            public virtual void ReadInfo()
            {
                string myCode = "Code Here: I can read";
            }
     
            public virtual void WriteInfo()
            {
            }
     
            public virtual void DeleteInfo()
            {
            }
        }
    SimpleUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class SimpleUser : User
        {
     
        }
    ClientUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     public class ClientUser: User
        {
            public ClientUser(string name)
                : base(name)
            { }
     
            public override void WriteInfo()
            {
                string myCode = "Code Here: I can write";
            }
        }
    AdminUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     class AdminUser: ClientUser
        {
            public AdminUser(string name) : base(name) { }
     
            public override void DeleteInfo()
            {
                string myCode = "Code Here: I can delete";
            }
        }
    NullUser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        public class NullUser : User
        {
            public override void ReadInfo()
            {
     
            }
        }
    User Repository
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        public interface IUserRepository
        {
            UserType LogIn(string userName);
        }
    UserFactory
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
        public static class UserFactory
        {
            public static IUser GetUserStrategyFor(UserType userType, string name)
            {
                switch (userType)
                {
                    case UserType.SimpleUser:
                        return new User(name);
                    case UserType.ClientUser:
                        return new ClientUser(name);
                    case UserType.AdminUser:
                        return new AdminUser(name);
                    default:
                        return new NullUser();
                }
            }
        }
    UserService
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
        public class UserService
        {
            private IUserRepository _userRepository;
     
            public UserService(IUserRepository userRepository)
            {
                _userRepository = userRepository;
            }
     
            public IUser GetUser()
            {
                UserType userType = _userRepository.LogIn("test");
     
                IUser user = UserFactory.GetUserStrategyFor(userType, "test");
     
                return user;
            }    
        }
    Merci pour vos conseils.
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  2. #2
    Expert Confirmé
    Homme Profil pro
    Inscrit en
    février 2003
    Messages
    1 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 757
    Points : 2 993
    Points
    2 993

    Par défaut

    euh moi je ferai pas comme ca.

    Je mettrai dans User une variable de type UserType

    et dans les fonction Read,Delete je regarderait si le User a le level suffisant
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  3. #3
    Expert Confirmé
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    avril 2010
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2010
    Messages : 1 221
    Points : 2 703
    Points
    2 703

    Par défaut

    Pourquoi ne pas utiliser l'attribut PrincipalPermissionAttribute
    http://msdn.microsoft.com/fr-fr/library/k8b3sz1a.aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [PrincipalPermission(SecurityAction.Demand, Role = 'AdminUser')]
    void MyMethod(){}
    Pensez à la balise ainsi qu'au petit pouce vert
    WindowManager : Gérer facilement vos différentes fenêtres

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •