Programmation orientée objet et relation entre les classes.
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:
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:
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:
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:
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 :)