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
interface IUser
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 }
User
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(); }
SimpleUser
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() { } }
ClientUser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class SimpleUser : User { }
AdminUser
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"; } }
NullUser
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"; } }
User Repository
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() { } }
UserFactory
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public interface IUserRepository { UserType LogIn(string userName); }
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 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(); } } }
Merci pour vos conseils.
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; } }
Partager