nPress Architecture & Design

Architecture

nPress SLNLa solution nPress est composée de trois projets :

Design

Je ne vais pas utiliser DDD dans ce projet. Il y a bien un repository mais, il ne correspond pas à celui que l’on trouve habituellement dans DDD. Le repository utilisé, sert d’abstraction sur la DAL. La DAL étant représentée par l’ORM ou un autre système (db4o) que l’on souhaite mettre en œuvre.

NPress Diagram1

Le point d’entrée de l’application web MVC est le controller (je passe sur les routes). Le controller si il en a besoin, va faire appel à un service métier qui lui-même fera appel à un repository pour récupérer ou mettre à jour des données persistées. Le controller sélectionne ensuite une vue et l’affiche.

Ioc/DI

Pour casser la dépendance entre les services et le repository concret. Chaque repository devra implémenter une interface IRepository. Le repository concret utilisé sera ensuite chargé par le biais d’un moteur d’injection de dépendance. J’utilise ici AutoFac. Je devais utiliser StructureMap, mais suite à la mise à jour de Nhibernate en version 2.1, une erreur est apparu. Je n’ai pas vraiment le temps de déboguer les sources de StructureMap, j’ai donc simplement changé le moteur pour un autre tout aussi bon.

AutoFac peut être configuré par code ou par fichier XML. La configuration par code est précunisée dans le cas ou l’on connait à l’avance les dépendances à injecter, ce qui est mon cas puisque je ne vais utiliser que Nhibernate.

Voici le code de mon test unitaire AutoFac

[csharp] [Test] public void TestConfiguration() { var builder = new ContainerBuilder(); builder.Register<NHibernateRepository>().As<IRepository>(); var container = builder.Build(); var rep = container.Resolve<IRepository>();

Assert.IsAssignableFrom(typeof(NHibernateRepository),rep); } [/csharp]

Conventions

Liens

projet codeplex : http://npress.codeplex.com/ Nouveau projet : nPress