Exemple d'application métier avec Silverlight 3 et .NET RIA Services - Partie 19 : ASP.NET Dynamic Data

| Brad Abrams | Thomas Levesque (Traduction) |

Cet article fait partie d'une série de traductions d'articles de Brad Abrams sur le développement d'applications métier avec Silverlight et .NET RIA Services.

Retrouvez l'ensemble des articles de la série sur cette page : Exemple d'application métier avec Silverlight 3 et .NET RIA Services.

Commentez cet article : Commentez ♪

- Titre : Exemple d'application métier avec Silverlight 3 et .NET RIA Services - Partie 19 : ASP.NET Dynamic Data

- Auteurs : Brad Abrams, Thomas Levesque (Traduction)

- Parution : 15 janvier 2011

- Licence : Copyright ® 2011 Brad Abrams. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Traduction

- Article

- Conclusion

- Remerciements

Traduction

Cet article est la traduction la plus fidèle possible de l'article original de Brad Abrams, Business Apps Example for Silverlight 3 RTM and .NET RIA Services July Update: Part 19: ASP.NET Dynamic Data.

Article

Je m'amuse toujours autant à mettre à jour ma simple démo d'application métier du Mix09. Dans cette partie, je voulais étudier comment on pourrait créer le site d'administration de notre site. Puisque c'est juste pour un très petit nombre d'utilisateurs de confiance, je voudrais obtenir quelque chose de fonctionnel rapidement. Je voudrais aussi partager toute la logique métier et le code de validation entre le client Silverlight et le site web d'administration.

Vous pouvez trouver la série complète ici.

Cette démo nécessite les éléments suivants (tout est 100 % gratuit) :

- Visual Studio 2008 SP1 (qui inclut SQL Server Express 2008) ;

- Silverlight 3 RTM ;

- .NET RIA Services July '09 Preview ;

- ASP.NET Dynamic Data Preview 4 Refresh.

Téléchargez aussi les fichiers de la démo complète.

Pour cette partie, nous allons nous concentrer sur la réalisation d'une page WebAdmin utilisant ASP.NET Dynamic Data. Dynamic Data rend très facile, je dirais même trivial, de construire une application web basée sur des données. Ce qui est génial, c'est qu'il est super facile d'étendre et de personnaliser l'application incrémentalement. Dynamic Data est basé directement sur Entity Framework et Linq to SQL. Avec le support de .NET RIA Services, vous pouvez maintenant travailler avec n'importe quelle source de données (je l'ai montré avec des POCO, des DataSets, WCF, des DTO, et modéliser votre logique métier et votre logique de validation d'une façon commune.

Juste pour récapituler, dans les parties précédentes, nous avons défini un DomainService.

[EnableClientAccess]
public class SuperEmployeeDomainService :
LinqToEntitiesDomainService<NORTHWNDEntities>
{

public IQueryable<SuperEmployee> GetSuperEmployees()
{
return this.Context.SuperEmployeeSet
.Where(emp=>emp.Issues>100)
.OrderBy(emp=>emp.EmployeeID);
}

public SuperEmployee GetSuperEmployee(int employeeID)
{
return this.Context.SuperEmployeeSet
.Where(emp => emp.EmployeeID == employeeID)
.FirstOrDefault();
}

public void InsertSuperEmployee(SuperEmployee superEmployee)
{
this.Context.AddToSuperEmployeeSet(superEmployee);
}

public void UpdateSuperEmployee(SuperEmployee currentSuperEmployee)
{
this.Context.AttachAsModified(currentSuperEmployee, this.ChangeSet.GetOriginal(currentSuperEmployee));
}

public void DeleteSuperEmployee(SuperEmployee superEmployee)
{
if ((superEmployee.EntityState == EntityState.Detached))
{
this.Context.Attach(superEmployee);
}
this.Context.DeleteObject(superEmployee);
}
}

Et nous avons réalisé une application Silverlight pour l'utiliser.

Dans cette partie, pour commencer, prenez le projet DomainServiceProject dans le répertoire ProjectTemplates dans les fichiers téléchargés de ASP.NET Dynamic Data Preview 4 Refresh. Vous pouvez ajouter cette solution à votre projet ou, comme je l'ai fait, la fusionner avec une solution existante. Si vous choisissez cette dernière option, assurez-vous de récupérer le code dans web.config, global.asax, et le répertoire DynamicData.

Dans un cas comme dans l'autre, le seul code que vous avez besoin de modifier pour faire fonctionner le site basique est dans global.asax.

1: public static void RegisterRoutes(RouteCollection routes) {
2:
3:     DefaultModel.RegisterContext(
4:         new DomainModelProvider(typeof(SuperEmployeeDomainService)),
5:         new ContextConfiguration() { ScaffoldAllTables = true });
6:
7:     routes.Add(new DynamicDataRoute("{table}/{action}.aspx") {
8:         Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
9:         Model = DefaultModel
10:     });

À la quatrième ligne, on fournit le SuperEmployeeDomainService (voir le code plus haut). Pour tout le reste, on laisse le code par défaut du modèle.

Tapez F5 et naviguez vers la page WebAdmin, et voilà ce que vous obtenez :

Cette page par défaut est très facile à personnaliser en éditant le fichier WebAdmin.aspx.

Cliquer sur une table nous amène à une vue par défaut où on peut trier, paginer, supprimer et insérer des éléments, etc.

Cliquer sur Edit (ou New) nous amène à un formulaire qui comprend entièrement les règles de validation qu'on a définies dans notre modèle métier.

La prochaine étape est d'utiliser toute la puissance de Dynamic Data pour personnaliser cette application selon nos besoins. Regardez les vidéos et tutorielspas à pas pour en savoir plus à ce sujet.

Maintenant, nous nous retrouvons avec un client Silverlight et un client ASP.NET qui travaillent tous les deux sur les mêmes données, avec la même logique métier et de validation. Cela réduit grandement les coûts de maintenance, car tout ce qu'on ajoutera au DomainService sera automatiquement pris en compte ici.

Conclusion

Ceci conclut la dix-neuvième partie de cette série. La partie suivante traitera de NHibernate.

Remerciements

Je tiens ici à remercier Brad Abrams de nous avoir autorisés à traduire son article.
Je remercie également ClaudeLELOUP pour sa relecture et ses propositions.