1 pièce(s) jointe(s)
Couches métier avec Entity et Domain-Driven Design: DAL, DAO, DTO, POCO, Repo
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).
http://www.developpez.net/forums/att...1&d=1334948903
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:
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:
Code:
1 2 3 4 5 6 7 8
|
public class AlbumPOCO
{
public Album Album { get; set; }
// Diverses méthodes métier
// ...
} |
J'aimerais avoir un retour concernant la création des POCO (manière de les implémenter, génération auto?). - 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!