Bonjour à tous.
J'ai un petit problème de conception au niveau de la programmation orientée objet et du rôle que doit jouer chaque classes.
Je vais prendre un exemple pour illustrer mes dires.

Cas simple : une seule classeJ'ai l'habitude de créer mes entités dans un projet à part afin de pouvoir les référencer dans toutes les couches.

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
namespace Test.Application.EL
{
    public class UserEntity
    {
        public long Id { get; set; }
        public string Lastname { get; set; }
        public string Firstname { get; set; }
 
        public UserEntity(){
 
        }
    }
}

Pour tout ce qui est CRUD je créé un manager associé.
Code c# : 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
26
27
28
29
30
31
32
33
 
namespace Test.Application.DAL
{
    public class UserManager
    {
        public object Add(UserEntity user)
        {
            // 1) Check, si il y a des erreurs, renvoi d'une liste d'enum par exemple.
            // 2) Ajout de l'utilisateur à la base de 
            return user;
        }
 
        public UserEntity Get(long id)
        {
            UserEntity user;
            // Traitement
            return user;
        }
 
        public List<UserEntity> GetAll()
        {
            List<UserEntity> users;
            // Traitement
            return users;
        }
 
        public bool Delete(UserEntity user)
        {
            // Traitement
            return true;
        }
    }
}


Cas plus complexe : deux classes imbriquéesUn utilisateur peut posséder ou nom de compte. Un compte ne peut exister sans utilisateur. 0..1 <-->1
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
namespace Test.Application.EL
{
    public class UserEntity
    {
        public long Id { get; set; }
        public string Lastname { get; set; }
        public string Firstname { get; set; }
        public AccountEntity Account { get; set; }
 
        public UserEntity(){
 
        }
    }
}

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
namespace Test.Application.EL
{
    public class AccountEntity
    {
        public long Number { get; set; }
        public double Amount { get; set; }
 
        public AccountEntity()
        {
        }
    }
}

1) J'ai mis Account dans UserEntity mais aurait t'on pu mettre plutôt UserEntity dans Account
2) Faut il un manager UserManager et un AccountManager?
- Je en sais pas si c'est à UserManager d'insérer dans la table user et account.
- Si c'est UserManager qui insère dans user et qui appelle UserAccount pour insérer dans account
- Si c'est UserManager qui insère dans user et UserAccount qui insère dans account.
3) On verra le cas des 0..* <--> 0.* après