IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

Framework MVC sur Codeplex


Sujet :

ASP.NET MVC

  1. #21
    CUCARACHA
    Invité(e)
    Par défaut
    Ce que ce Framework apporte dépend pas mal de ceux qui l'utilisent...

    En ce qui concerne les couches :
    Pour les débutants, il offre un projet pré structuré en couches très claires.
    Il y en a beaucoup, c'est vrai, mais c'est très pratique (surtout quand c'est déjà fait).

    Pour les développeurs plus confirmés, ma structuration en couche n'est pas super moderne mais j'ai voulu qu'elle soit très claire et éviter les concepts compliqués.

    Toutes les références entre les couches sont faites et il ne faut pas y toucher.

    En ce qui concerne la génération :
    Le framework contient des .tt répartis à des endroits appropriés.

    On génère l'EDMX en choisissant la stratégie de génération de code : aucune

    On reconstruit l'ensemble des tt

    - tables d'options (que j'ai l'habitude d'appeler lookups) sont automatiquement converties en enum. Ce qui permet de faire des switch à l'aide d'un petit outil du framework EnumTypeTo<T> qui permet de passer de l'int de l'Id à sa valeur ennumérée, c'est SUPER PRATIQUE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    switch (EnumTools.EnumTypeTo<enTypesBranches>(model.typeNodeId))
    						{
    							#region applicationpool
    							case enTypesBranches.applicationpool:
       bla bla bla
    break;
    }
    et ça fonctionne aussi dans l'autre sens EnumTools.EnumTypeTo<int>(enTypesBranches.applicationpool)
    - domain (je pense que j'aurais du appeler ça entities mais finalement c'est assez clair) : C'est là que sont générées les classes entités à la place de celles qui sont générées par l'edmx. Ces classes ont les mêmes limitations que les entities de l'EF.

    - MetaData : Ce sont des objets qui ont strictement la même signature que les entités mais sans la navigation. Il sont décorés des data annotations localisées (toutes, y compris celles qui ne pouvaient pas l'être dans la version d'origine), les ressources associées sont liées par un Tag préfixé Ety_...
    Depuis hier, un nouveau tt va générer l'ensemble des ressources dont les chaines seront préfixées par deux _ (ce tt conserver les chaines ajoutées à la main d'une génération à l'autre, il génère autant de lanques qu'on veut, il suffit donc d'envoyer les XML à un traducteur par langue et de réintégré ça.

    - Dto : Même principe que les MetaData mais les classes et les membres sont dévorés avec les [DataContract] et [DataMember]

    - DataRepository : une seule classe pour tous les datarepositories (on aurait pu faire une classe par DR comme certain le font, c'était plus simple pour moi de faire comme ça).

    TRES IMPORTANT : L'ensemble des E/S en base supporte les Transactions.

    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
     
    		[HttpPost]
    		public JsonResult Arbre_CreationBranche(string authority)
    		{
    			JavaScriptSerializer serializer = new JavaScriptSerializer();
    			Arbre_ActionBranche_JSon model = serializer.Deserialize<Arbre_ActionBranche_JSon>(Request.Form[0]);
    			using (TransactionScope TS = new TransactionScope())
    			{
    				try
    				{
    					using (InnovaCMSRepositories _context = new InnovaCMSRepositories())
    					{
    						InnovaTreeTools TreeTools = new InnovaTreeTools(_context);
    						Hierarchy nouvelleBranche = TreeTools.CreationBranche(model.title, model.parentId, model.position, model.typeNodeId);
    						switch (EnumTools.EnumTypeTo<enTypesBranches>(model.typeNodeId))
    						{
    							case enTypesBranches.storagefolder:
    								using (InnovaCMSServices.IOManagerClient _serviceContext = new InnovaCMSServices.IOManagerClient()) { 
    									//ToDo:Ici
    									//_serviceContext.Folder_Create()								
    								}
    								break;
    							case enTypesBranches.storagefile:
    								break;
    							default:
    								throw new NotSupportedException();
    						}
    					}
    					TS.Complete();
    				}
    				catch (Exception ex)
    				{
    					TS.Dispose();
    					throw ex;
    				}
    			}
     
     
     
    			throw new NotImplementedException();
    		}

    La combinaison de ces trois catégories d'objets (mappés les un sur les autres avec EmmitMapper) permet d'utiliser une couche business commune aux portails et aux web services (en gros on développe le portail en rangeant bien son code dans la couche business et il devient naturel de doter les portails d'une API en plus des services business).

    Sur mon projet en cours, il n'y a plus que le système des ressources générées mais je n'ai pas encore eu le temps de le ré-intégré au Framework.

    En ce qui concerne la communication entre le modèle et la vue
    la vue et la vue layout, il y a un les contrôleurs héritent d'un _Controllers_Base<T> where T:_Models_Base

    En d'autres termes, toutes les membres nécessaires à la vue layout sont déclarés dans _Models_Base, ça permet de convertir le model en _models_base dans la vue layout et donc de bénéficier de membres fortement typés et permet de ne pas avoir à utiliser le ViewBag.

    Petit désavantage, manipulation d'un seul modèle par controlleur (pour ceux qui utilisent la vue layout et donc, pas pour les vues partielles).

    En ce qui concerne la communication entre les controlleurs et les fichiers CSS et Javascript.

    Chaque Vue [View] dispose
    • Javascript (JQuery) ino[View].js
    • Javascript (JQuery) ino[View]DocReady.js
    • Javascript (JQuery) inoDynamic[View].js (facultatif) générée par une vue afin de passer des valeurs depuis le serveur aux scripts chargés par l'intermédiaire de variables (script construit côté serveur)
      C'est ultra pratique pour configurer dynamiquement certains composants JQuery UI (jstree, jqgrid que j'utilise en JQuery UI Pur et non dans sa version mvc).
    • css ino[View].css
    • css inoDynamic[View].css (facultatif) même principe que le fichier javascript dynamique.


    En ce qui concerne le javascript, plus de javascript au profit du JQuery.

    Pour ma part, j'utilise power amc combiné avec 3 scripts SQL en plus de celui qui est généré par power amc

    Destruction de la base
    Re création de la base
    Injection de la structure générée par Power AMC
    Re injection des données (bien entendu, ce script doit parfois être modifié à la main).

    La connections à la base est ouverte une seule fois par méthode publique (get/post) du contrôleur.

    Je dois encore améliorer le concept en particulier pour la couche de sécurité qui ne s'appuie pas sur cette connexion mais qui ouvre et ferme une connexion indépendantes.

    Lorsque le starter kit sera terminé, il y aura des controleurs et des vues pour concus pour faciliter la compréhension de tout ça.

    De mon point de vue (mais je ne suis pas objectif)... Ca me parait être le meilleur compromis souplesse / stabilité.

    Une fois qu'on a compris la façon de l'utiliser, ça fait gagner beaucoup de temps et en particulier en mode agile où on restructure la base fréquemment.

    Tous les web services sont structurés de la même facon :

    MethodeResult Methode (MethodeQuery query) {
    implementation.... (utilisation de classes d'implémentation qui utilisent les classes de la couche business).
    }

    C'est super pratique...
    MethodeResult hérite de IResult
    MethodeQuery hérite de IQuery

    ces deux interfaces permettent de forcer le développeur à implémenter des membres qui permettent de monitorer le tout.

    La couche common permet de partager les objets entre plusieurs portails et plusieurs web services.

    Pour conclure (pour ce soir) je dirais que c'est un projet hyper factorisé, quasement pas de redondance de code.

    Implémentation de log4net

    il y a tout les outils nécessaires pour réussir son projet MVC aussi important soit-il (encore une fois, c'est selon moi et je ne suis pas objectif).

    ++

    Laurent

  2. #22
    CUCARACHA
    Invité(e)
    Par défaut
    J'oubliais...

    J'utilise toujours les formulaires Ajax natifs de MVC pour le post des données des formulaires ce qui permet de poster en une fois toute une hiérarchie de partial views (pour ceux qui savent, c'est trivial mais pour les autres, ils vont un peu galérer avant d'y parvenir, en particulier s'il y a des mises à jours partielles des vues suite à des options prises par les utilisateurs).

    Pour le rest j'utilise Ajax de JQuery.

    Je détaillerais ce point plus tard car j'ai du boulôt...

    Bien à vous

    Laurent

  3. #23
    Nouveau membre du Club
    Inscrit en
    Janvier 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 16
    Points : 31
    Points
    31
    Par défaut
    Merci pour ces premiers retours, concernant les gains en semaine sur la partie SOA qu'entends tu par là ?

    Par ailleurs j'ai vu que ton framework est sous license GPLv2 ? Ton CMS aussi est ou sera open-source donc ?

  4. #24
    CUCARACHA
    Invité(e)
    Par défaut
    Citation Envoyé par Moggik Voir le message
    Merci pour ces premiers retours, concernant les gains en semaine sur la partie SOA qu'entends tu par là ?
    En fait, j'ai une vision très pragmatique de ce qu'est un SOA : Faire fonctionner l'ancien avec le nouveau.

    Pour ce faire, il faut être capable de communiquer avec les applications modernes, en général via web services SOAP ou REST, le framework apporte du savoir faire pour simplifier et renforcer ces échanges.

    La partie SOAP qui s'appuie sur le WCF bénéficie d'un générateur de DTO exactement comme je génère les MetaData (les classes du domaine dont les membres sont décorés des data annotations).

    La partie REST a été retirée puisque la Web API de MVC 4 le fait mieux que ce que je le faisais (je générais de l'XML en changeant le content type des vues.

    Le tout agrémenté que quelques règles d'utilisation (je vais bientôt ajouter le starter kit WCF).

    Pour la communication, il y a plein de petits outils dont pas mal d'extensions qui permettent de faciliter la manipulation des fichiers texte.

    Reste Excel, Access et les autres sources de données qui peuvent être exploitées à l'aide d'un ETL ou tout simplement par des petites passerelles faites à façon.

    Citation Envoyé par Moggik Voir le message
    Par ailleurs j'ai vu que ton framework est sous license GPLv2 ? Ton CMS aussi est ou sera open-source donc ?
    Pour le moment, je ne pense pas mais, comme je veux concurrencer Dot Net Nuke, c'est pas impossible. Mon CMS n'est pas un simple gestionnaire de contenu (editeur de pages en ligne). Il y en a plein et il sont très bien. J'utilise d'ailleurs TinyMCE comme éditeur de page.

    Il s'agit plutôt d'une plateforme de gestion de forêts d'applications orientée Web 2.0. Il devient vraiment très simple d'utiliser des briques logicielles externes, même mes briques seront développées sur le même modèle que celles qui le seront par mes partenaires. En gros, on intègre un google map aussi facilement qu'une image et surtout, il sera aussi bien intégré au rendu de la page que n'importe quel autre contenu.

    Toutes les fonctionnalités sont disponibles pendant un certain temps. Au terme de la période d'essai, l'utilisateur se voit notifié de l'arrêt proche des modules qu'il a mi en oeuvre dans sa collection de site (par exemple site brand + boutique + corporate).

    Chaque brique logicielle peut potentiellement utiliser d'autres briques logicielles et chacune d'elles expose ses dépendances aux autres (et permet donc d'établir des devis très précis de ce que coûtera leur exploitation :

    • Formulaire de contact (envoi de mail au web master) gratuit
    • Formulaire de contact avec conservation des coordonnées de l'expéditeur


    • Implique d'avoir le gestionnaire de contacts de base à 2 € / mois
    • Formulaire de contact avec conservation des coordonnées de l'expéditeur + Mini module CRM de planification des relances


    • Implique d'avoir le gestionnaire de contacts de base à 2 € / mois
    • Implique d'avoir le gestionnaire le mini CRM à 5€ / mois par tranche de 1000 contacts
    • Formulaire de contact avec conservation des coordonnées de l'expéditeur + Mini module CRM de planification des relances téléphoniques automatisées par synthèse et reconnaissance vocale (Projet initial qui m'a permis d'être incubé par Telecom Paris)


    • Implique d'avoir le gestionnaire de contacts de base à 2 € / mois
    • Implique d'avoir le gestionnaire le mini CRM
    • Implique d'avoir la brique telecom (inbound / outbound)
    • Implique d'avoir la brique éditeur de scénario VXML
    • Implique d'acheter du temps de télécommunication $€$

    Etc...

    Les prix, c'est juste pour vous donner une idée de la souplesse...

    Petit gadget : Upload no limit... (sisi) Permet d'uploader des fichiers de n'importe quelle taille (je pense même offrir une option cloud pour que l'espace de stockage soit potentiellement illimité) (en gros, c'est un upload qui découpe les fichiers en trames de 64KB et qui les reconstitue à l'arrivée).

    Donc, le starter kit pour fabriquer les modules sera open source mais je me garderais certains modules en particulier la téléphonie, le back office avec tout le paramétrage et la commercialisation des briques logicielles et des services partenaire sur une place de marché qui sera elle même bâtie à l'aide de briques que je commercialiserais.

    J'y suis presque, mais vraiment presque...

    J'ai hâte d'avoir plein de commentaires malveillants de détracteurs qui trouveront mille défauts à ma mécanique

    ++

    Laurent
    Dernière modification par CUCARACHA ; 04/07/2012 à 22h05.

  5. #25
    CUCARACHA
    Invité(e)
    Par défaut
    Ah oui... Cette fois-ci, contrairement à l'ancien, il est possible de télécharger la totalité du contenu du site pour l'héberger ailleurs les briques logicielles restent activent tant que le client paye ses abonnements même si le site n'est pas hébergé chez moi.

    Bien entendu, si on héberge les pages ailleur, on ne part pas avec l’éditeur de page ou le moteur de recherche intégré (qui va dépoter grave promis )

    ++

    Laurent

  6. #26
    CUCARACHA
    Invité(e)
    Par défaut
    Accessoirement, ça génère du XHTML 1.1 Strict et, lorsque le validateur du W3C pour le HTML 5 ne sera plus en bêta, sans doute de l'XHTML 5.

  7. #27
    CUCARACHA
    Invité(e)
    Par défaut
    Bonjour,

    Je viens d'ajouter une page d'explications pour lancer le projet :

    http://innovacallframework.codeplex....n%29&version=1

    Pourriez-vous essayer et me dire si vous avez réussi à lancer le projet ?

    D'avance merci pour votre aide,

    Sincères salutations,

    Laurent

  8. #28
    CUCARACHA
    Invité(e)
    Par défaut
    Bonjour à tous,

    Voilà, je viens d'archiver la V1 du starter kit http://innovacallframework.codeplex.com/.

    Vous trouverez les premières instructions d'utilisation ici :

    http://innovacallframework.codeplex....n%29&version=1

    et le code source ici

    Pour mémoire, le starter kit comprend (pour le moment)

    Une page d'accueil
    Une page LogOn
    Une page Register
    Une page AccountActivation (que ne peut fonctionner que si vous avez correctement configuré les mail settings et l'url de l'application de base)

    A venir :
    KendoUI
    Menus dynamiques avec interface KendoUI
    Grille de gestion des utilisateurs avec la grille de KendoUI

    JqueryUI
    Les menus seront toujours en KendoUI car la menubar de JqueryUI N'est pas encore sèche
    Grille de gestion des utilisaterus avec JQGrid.

    ServiceLayer & public WCF API
    Ajout de la service layer destinée à consommer les services (à priori WCF)
    Ajout d'un service exposé pour les autres application avec une petite API (sans doute un service d'authentification et de gestion des utilisateurs).

    Dans l'attente de vos retours,

    Sincères salutations,

    Laurent Jordi

  9. #29
    CUCARACHA
    Invité(e)
    Par défaut
    Salut,
    Le portail de démo est en ligne à l'adresse http://framework.innovacall.net
    L'enregistrement des utilisateurs fonctionne mais comme le serveur smtp n'est pas encore configuré ça crée les comptes mais ça n'envoie pas encore la mail d'activation.
    Le user name et le pass sont écrits sur la page logon.
    Bien à vous
    Laurent

  10. #30
    CUCARACHA
    Invité(e)
    Par défaut
    Bonjour à tous,

    J'ai tenu compte de vos réflexions et suggestions et j'ai fait une nouvelle passe de controle de l'ensemble de l'application.

    Je dois encore améliorer le starter kit car je l'ai fait un peu trop vite et il a pas mal d'imperfections.

    Voici les opérations en cours :
    Refonte complète de la base de données exemple avec mise aux normes (Innovacall) Les MPD correspondant aux packages utilisés dans les exemples seront publiés dans la page exemple.

    Réorganisation des shémas de la base pour mieux coller au contenu des exemples.

    Priorité 1 : Création d'un petit formulaire de profil utilisateur (pas avec le ProfileMembership)

    Priorité 2 : Finalisation de l'exemple Order Manager (Dispositif simplifié de prise de commande (Exemple avancé)

    Priorité 3 : Finalisation des exemples sur les controles unitaires simples (Textbox, Listbox, DropDownList, CheckBox, RadioButton)

    Priorité 4 : Création de deux exemples JQuery UI : CLEditor et JSTree.

    Priorité 5 : Création de quelques exemples avec KendoUI.

    Priorité 6 : Finalisation du logger avec interface de consultation.

    Et j’arrêterais là pour le starter kit.

    Objectif : Avant début septembre.

    Bien à vous

    Laurent

  11. #31
    CUCARACHA
    Invité(e)
    Par défaut
    J'ai presque fini la liste !

    Donc : grosse mise à jour du http://framework.innovacall.net et des sources sur http://innovacallframework.codeplex.com

    J'ai ajouté un petit lecteur de diagrammes mimi tout plein (malheureusement pas top sous IE mais j'ai contourné) surtout sous Firefox, Chrome (bref, pas IE quoi).

    Il ne me reste plus que la fin du formulaire de prise de commande mais il est déjà bien entamé.
    Suite à une discussion sur WRI (http://forum.webrankinfo.com/laisser....html#p1386247)

    J'ai changé le mode d'accès aux pages (j'authentifie l'utilisateur admin dès l'ouverture de session) pour faciliter la navigation des visiteurs d'une part et pour permettre aux moteurs de recherche de référencer toutes les pages d'autre part.

    Dans l'attente de nouvelles critiques de votre part...

    Bonne nuit,

    Laurent

  12. #32
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 62
    Points : 133
    Points
    133
    Par défaut
    Hello,

    Ton autre topic a disparu ? Ou il s'agit d'un problème du forum ?

  13. #33
    CUCARACHA
    Invité(e)
    Par défaut
    Bonjour,

    Etant donné qu'il m'était impossible de contenir certains médisants, j'ai effectivement décidé de demander le retrait de la discussion. Elle continue dans un groupe Facebook prévu à cet effet dans il n'est pas possible d'être anonyme et dont je maîtrise la modération : http://www.facebook.com/groups/Archidotnet/

    Bien à toi

    Laurent

  14. #34
    CUCARACHA
    Invité(e)
    Par défaut Version Azure presque prête
    Donnant une suite favorable aux demandes qui m'ont été faites relative à l'utilisation du framework Innovacall dans Azure, j'ai souscris à la plateforme cloud de Microsoft et j'ai pu publier une première version (tout ne fonctionne pas pour le moment, je n'ai pas terminé les tests)
    Pour ceux qui sont intéressés, vous pouvez suivre les évolutions à cette adresse.
    http://mvc4opensourceazureportal.cloudapp.net/

    Bien à vous

    Laurent

  15. #35
    CUCARACHA
    Invité(e)
    Par défaut
    Bonjour,

    J'ai compris pourquoi mon framework ne fonctionnait pas sur Azure et j'ai pu corriger l'erreur.

    Lorsqu'on est dans SQL Azure et qu'on affiche la chaîne de connexion à la base de donnée, la chaîne n'inclut pas l'option MultipleActiveResultSets=True et, accessoirement, il s'agit d'une chaîne ADO.net et non une chaîne Entity Framework.

    Il suffit donc d'activer l'ouverture simultanée de plusieurs recordsets pour pouvoir utiliser le lazy loading.

    Ca fonctionne :
    http://mvc4opensourceazureportal.clo...derWithDetails

    Utiliser Admin / 123456 pour l'identification.

    Je n'ai pas encore copié tous les sources sur mon instance Azure, c'est pourquoi certains onglets sont vides en bas de la page.

    Bien à vous

    Laurent

  16. #36
    CUCARACHA
    Invité(e)
    Par défaut
    Pour finaliser le portage sur Windows Azure, je dois encore implémenter un dispositif d'envoi d'EMail :

    http://blog.smarx.com/posts/emailthe...-windows-azure
    http://blogs.msdn.com/b/patrick_butl...rt-1-of-2.aspx

    Je pense que ça sera prêt ce soir ou demain.

    Bien à vous

    Laurent

  17. #37
    CUCARACHA
    Invité(e)
    Par défaut Azure vs 2008 R2 web : impacts sur le Framework
    Il n'y a pas trop de différence mais il en existe tout de même.

    Le web.config est légèrement différent.
    Je dois revoir le système d'affichage des sources du portail de démonstration pour pouvoir accéder aux blobs Azure.
    Je vais retirer log4net pour la version cloud et utiliser le logger d'Azure:
    http://blog.woivre.fr/Archives/2012/...-windows-azure

  18. #38
    CUCARACHA
    Invité(e)
    Par défaut Nouvelle release pour le Framework MVC4 non cloud
    Bonjour,

    J'ai le plaisir de vous annoncer que j'ai publié une nouvelle version du Framework et du Starter kit.

    Je précise que le Framework et les couches n'ont pas été retouchées à l'exeption du controlleur LogOn de la couche de sécurité pour activer le retour après identification vers la page appelante.

    Nouveautés :

    Activation de l'enregistrement des contacts, maintenant il faut créer son compte pour pouvoir utiliser les exemples avancés.

    Donc, création de compte, envoi de mail d'activation du compte, landing page d'activation du compte.

    Ajout d'un gestionnaires d'adresses (Postale, Livraison et facturation) Full Ajax avec jointure entre l'utilisateur connecté et la table des adresses.

    Utilisation d'une Web API dans la Textbox de saisie du pays pour alimenter autocomplete de JQuery.

    Petite amélioration du comportement du formulaire de prise de commande qui vous redirige vers l'écran de saisir de votre fiche contact (minimaliste) avec retour automatique à la page appelante après création de la fiche.

    Quelques corrections orthographiques par ci par là...

    Démo : http://framework.innovacall.net
    Sources : http://innovacallframework.codeplex.com

    En espérant que vous pourrez utiliser ce Framework ou une partie de ce dernier dans vos projets.

    Sincères salutations,

    Laurent Jordi

Discussions similaires

  1. [Architecture] Métrologie/sondes et framework MVC
    Par blbird dans le forum Développement Web en Java
    Réponses: 9
    Dernier message: 19/03/2009, 10h42
  2. cherche framework basé sur Struts
    Par decksroy dans le forum Struts 1
    Réponses: 8
    Dernier message: 06/03/2007, 16h01
  3. Perdu dans tous ces framework, mvc, et template
    Par __fabrice dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 02/09/2005, 12h00
  4. [MVC] Différences entre les framework MVC push et pull ?
    Par XavierZERO dans le forum Frameworks Web
    Réponses: 5
    Dernier message: 15/01/2004, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo