Bonjour à tous!
Je suis en cours d'analyse pour la réalisation de la couche métier de mon application. Après quelques brainstorming il a été décidé de partir sur une architecture DDD. J'aimerais avoir l'avis de ceux qui ont déjà utilisé cette architecture et quelques conseils d'amélioration éventuellement.
L'achitecture du projet est en pièce jointe (screen de l'arborescence dans VS).
Pour la décrire brièvement, elle comprends:
- Une couche DAL qui contient mon modèle entity ainsi que mon ObjectContext généré à partir d'un template T4
- Une couche DTO qui contient des DTO générés à l'aide d'un template T4 à partir du modèle entity du type:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 public partial class Album { #region Primitive Properties public virtual int IdAlbum { get; set; } public virtual string Name { get; set; } #endregion #region Navigation Properties public virtual ICollection<User> User { get { if (_user == null) { var newCollection = new FixupCollection<User>(); newCollection.CollectionChanged += FixupUser; _user = newCollection; } return _user; } set { if (!ReferenceEquals(_user, value)) { var previousValue = _user as FixupCollection<User>; if (previousValue != null) { previousValue.CollectionChanged -= FixupUser; } _user = value; var newValue = value as FixupCollection<User>; if (newValue != null) { newValue.CollectionChanged += FixupUser; } } } } private ICollection<User> _user; #endregion #region Association Fixup private void FixupUser(object sender, NotifyCollectionChangedEventArgs e) { if (e.NewItems != null) { foreach (User item in e.NewItems) { if (!item.Album.Contains(this)) { item.Album.Add(this); } } } if (e.OldItems != null) { foreach (User item in e.OldItems) { if (item.Album.Contains(this)) { item.Album.Remove(this); } } } } #endregion }- Une couche POCO qui contient des POCO créés par inclusion comme ci-dessous:
J'aimerais avoir un retour concernant la création des POCO (manière de les implémenter, génération auto?).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class AlbumPOCO { public Album Album { get; set; } // Diverses méthodes métier // ... }- Une couche Repo qui contient des repositories contenant des méthodes CRUD. Ce n'est pas encore le cas là, mais une abstraction sera faite à ce niveau avec création d'interfaces pour rendre tout ça testable
Merci d'avance de vos avis et conseils sur cette architecture!
Partager