Mode d'emploi du projet modèle MVC-entity

*-*-*-*-*-*
historique
v0.1 15/07/2016 (Julien Legrand) : 1ère version
*-*-*-*-*-*

# Actions à faire après copie
1. Renommer les projets en suivant ce schéma : "CD67.[nom appli].[Entity/Factory/MVC/Tests/Batchs]"
2. Renommer également les assemblies et espaces de nom de chaque projet (dans les propriétés des projets, onglet "Application")

x. Créer vos propres fichiers d'extension avec DataAnnotation ici : "CD67.ModeleMVC.Entity\Extend" et supprimer le fichier d'exemple "CD67.ModeleMVC.Entity\Extend\PARAM.cs"
x. Créer vos propres factory ici : "CD67.ModeleMVC.Factory" et supprimer le fichier d'exemple "CD67.ModeleMVC.Factory\PARAMFactory.cs"
x. Créer vos propres controller/vues ici : "CD67.ModeleMVC.MVC\Controllers" et supprimer les fichiers d'exemple : 
(NOTE : personellement j'utilise à la création du controller le modèle "Contrôleur MV5 avec vues, utilisant Entity Framework" en générant les vues et avec la page de disposition que je souhaite, ensuite je modifie le code du contrôleur pour utiliser les classes "Factory")
x. Modifier le fichier "CD67.ModeleMVC.MVC\App_Start\RouteConfig.cs" par rapport à vos contrôleurs

10. supprimer ce fichier pour ne pas que l'on sache que vous avez utilisé un modèle


# Description générale
La solution est consituée de 4 projets :
- CD67.ModeleMVC.Entity : Projet qui contient les objets métiers, c'est à dire dans le cas de projets Entity : le modèle entity framework
- CD67.ModeleMVC.Factory : Projet qui contient les classes permettant la gestion des objets : les actions CRUD pour chacun à minima
- CD67.ModeleMVC.MVC : Projet qui comprend le site Web MVC, les packages Bootstrap et FontAwesome sont déjà installés
- CD67.ModeleMVC.Tests : Tests unitaires


# CD67.ModeleMVC.Entity
Le modèle se nomme par défaut "EntityModel"

Le dossier "Extend" contient les extensions éventuelles de classe Entity (qui se trouvent dans "EntityModel.edmx\EntityModel.tt\").
C'est notamment utile pour ajouter les DataAnnotations permettant de décrire le données en vue d'une génération de contrôles plus appropiés dans les vues MVC.
Attention à bien surveiller l'espace de noms lors de la création d'une classe dans ce sous-dossier (erreur fréquente) :
- par défaut ce sera : "CD67.ModeleMVC.Entity.Extend",
- mais il faut "CD67.ModeleMVC.Entity" (le même que les classes de bases Entity).

Le dossier "Internal" contient :
- "FormattedDbEntityValidationException.cs" : classe héritée de Exception qui permet un affichage plus complet dans les messages d'erreur pour les exceptions liées au format de données du modèle Entity
- "Entities.cs" : classe partielle permettant d'utiliser les nouvelles Exceptions FormattedDbEntityValidationException en surchargeant "SaveChanges()"
En cas d'ajout d'une nouvelle connexion avec Entity Framework, il faut ajouter une nouvelle classe d'extension du même type.


# CD67.ModeleMVC.Factory
Les classes Factory sont nommées ainsi : "[Nom objet]Factory"
On crée autant de classe Factory que d'objet à gérer
Elles doivent contenir un constructeur public avec le context Entities en paramètre qui se base sur le constructeur de la classe parente.
Elles contiennent généralement les fonctions suivantes : getById, getAll, add, update, delete.
C'est à adapter à chaque cas.

Le dossier "Internal" contient la classe de base "baseFactory" dont chaque "Factory" hérite.


# CD67.ModeleMVC.MVC
La partie Model du projet n'est pas nécessaire que pour définir des classes ne servant qu'à l'affichage, les classes mêtiers étant dans le projet Entity.

Le dossier "Views" contient par défaut :
- "Shared\_AppLayout.cshtml" : une page de disposition pour l'application
- "DisplayTemplates\YesNo.cshtml" et "EditorTemplates\YesNo.cshtml" : ils s'agit d'exemple de personnalisation d'affichage pour un type de champ, ici "YesNo". On attribut un type avec la DataAnnotation "[UIHint("YesNo")]" dans la classe Metadata et ce sont les fichiers dans DisplayTemplates et EditorTemplates du même nom qui seront utilisés pour créer le contrôle à l'affichage.

Le dossier "style" contient :
- un sous dossier "images" destiné à contenir toutes les images utilisées dans la mise en page
- "AppStyleSheet.css" : feuille de style à modifier pour le projet courant
- "ModeleStyleSheet.css" : feuille de style du modèle CD67 à ne pas modifier

Les scripts et styles sont chargés à l'aide des commandes : "@Scripts.Render("~/bundles/jquery")", "@Scripts.Render("~/bundles/bootstrap")" et "@Styles.Render("~/Content/css")".
La configuration de ceci se trouve dans ce fichier : "App_Start\BundleConfig.cs"

Les Glyphicons Bootstrap sont ici : http://getbootstrap.com/components/#glyphicons
Et les icônes FontAwesome là : http://fontawesome.io/icons/


# CD67.ModeleMVC.Tests
Projet le plus important de la solution :)