2009-09-07 9 views
1

D'abord, je tiens à préciser, je ne cherche pas un type de message «ma technologie est meilleure que la vôtre»; C'est un cas réel et j'ai été confronté à cette décision. Dans cet esprit, laissez-moi vous expliquer:WebForms/MVC à un programmeur Windows Forms

Nous avons une application WinForms. Cela a commencé au début de .NET 1.0 mais la première version d'expédition utilisait .NET 1.1. Il sont couches (comme BusinessLayer.dll, Datalayer.dll, Framework.DLL, etc.) mais à un certain point au cours du "long" cycle de développement de cette application, la couche "présentation" (Win Forms) a été infectée avec certains code, donc la "séparation entre le code et la présentation avec le code derrière" est une sorte de mythe. Mauvaises pratiques ou peu importe, la vérité est que l'application est là et ça marche.

Les années ont passé et nous avons eu .NET 2.0, nous avons lentement migré et il a surtout travaillé, a dû changer quelques appels ici et là. La dernière version a fait la même chose, mais pour .NET 3.5sp1. Nous avions besoin d'une sorte de service Web, et avons décidé d'utiliser WCF à la place. Ça fonctionne bien. Mais malgré toutes ces mises à niveau .NET, la plupart des bases de code de l'application sont toujours les mêmes que celles du rock and roll d'il y a 5 ans. Nous utilisons Gentle.NET (ancien et non maintenu maintenant) pour nos dataobjects (c'était une bénédiction il y a 5 ans!). Notre couche de présentation, les winforms, sont "jolies" car nous utilisons 90% de contrôles personnalisés complètement gdi +

(autant que possible sans avoir à pirater le WinAPi). L'application est tactile (c'est-à-dire qu'elle utilise l'encre mais ne dépend pas de cela), mais les boutons, les étiquettes, etc., tout est "conçu" pour être utilisé avec un appareil tactile. (TabletPC ou écran tactile). Bien sûr, certains utilisateurs utilisent le clavier/la souris.

Avec tout cela à l'esprit, et avec tout ce fuzz web2.0 et Internet (plus les messages de Jeff;)), nous envisageons la possibilité de réécrire l'application, mais en utilisant une technologie web. L'idée est évidemment d'apporter plus de disponibilité pour nos clients (ils peuvent utiliser le système quand et où ils veulent), et moins de maintenance (nous pouvons mettre à jour et c'est une mise à jour instantanée pour tous), etc. Internet vs WinApp thingy. Le problème est que, étant donné que c'est l'industrie des soins de santé, tous nos clients ne seraient pas disposés à "déplacer" leurs bases de données vers nos serveurs, ce qui est acceptable, et nous obligerait à installer un serveur web/base de données serveur dans leurs propres serveurs afin qu'ils aient leur propre copie. Pas un gros problème (sauf que nous aurions à les mettre à jour manuellement mais ce n'est pas un problème, étant donné que nous mettons à jour les applications Win32 depuis 5 ans maintenant!).

Maintenant, revenons à la "question" principale.

L'équipe a peu d'expérience Asp.NET, nous avons beaucoup programmé en ASP 2.0 (en 1999/2000) mais c'était un spaghetti de HTML + VBScript + CSS, donc je ne pense pas que ça compte. Après toute cette expérience (la bulle Internet!) Nous sommes retournés à VB6 puis C# .NET 1x et vous connaissez le reste de l'histoire. Nous sommes une petite équipe de développeurs C# pour WinForms. Nous avons fait l'expérience de Linq To SQL Experience lors de notre dernière expérience .NET 3.5, et nous l'avons aimé. Nous l'avons trouvé très naturel et très "si nous aurions eu il y a cinq ans ..." comme. Compte tenu de tout cela, réécrire l'application n'est pas une "tâche simple" (même si nous voulions le faire dans le déjà connu C# .NET), cela prendrait du temps et de la planification, mais nous pourrions corriger des dizaines d'erreurs et avec 5 ans d'expérience de travail avec l'application, nous pouvons maintenant dire que nous avons une meilleure idée de la façon dont les clients aimeraient utiliser le logiciel et quelles limites nous avons créées (par nous-mêmes) lorsque nous avons conçu l'application actuelle. Toute cette «connaissance» de l'application et du fonctionnement de l'entreprise pourrait être appliquée pour produire une bien meilleure application en termes de conception, de code et de convivialité. Rappelez-vous dans .NET 1.1 nous n'avions même pas de génériques!;) (vous verrez beaucoup de ArrayList traîner ici). En complément, nous utilisons Crystal Reports (et, comme d'habitude, nous le détestons). Nous ne pensons pas que le contrôle de l'encre soit un "must" non plus. Le HTML/CSS pourrait être façonné pour ressembler à ce que nous voulons, bien que nous soyons conscients que le HTML n'est pas WinForms (et donc certaines choses ne peuvent pas être reproduites).

Pensez-vous que planifier cela dans MVC (ou WebForms) serait trop fou? J'aime l'idée de MVC (ruby on rails like) (je n'ai jamais programmé en ruby ​​au-delà des bases du livre), donc personne dans notre équipe n'est un expert, mais nous pouvons toujours apprendre et lire. Cela ne doit pas être une "science de fusée", n'est-ce pas?

Je sais que toute cette question pourrait être un peu subjective, mais remplaceriez-vous une ancienne application Winforms avec une nouvelle application Web ASP/MVC/XXX? Avez-vous de l'expérience ou avez-vous essayé (et avez-vous eu du succès ou avez-vous échoué)?

Nous vous saurons gré de nous aider à mieux choisir ce que vous ferez.

Merci d'avance! Merci à tous ceux qui ont répondu, nous allons évaluer si c'est un bon coup ou non, c'est vraiment un sacré boulot, mais j'ai peur que l'application de bureau vieillit (en utilisant l'ancien réseau) 1.1 hacks) et qu'il fonctionne plus ou moins sans problème sous Vista et W7, je crains qu'une future mise à jour ne puisse le casser. En outre, beaucoup de parties «plus ou moins essentielles» de l'application exposent des idées mal conçues et nous avons dû pirater ici et là pour accomplir certaines tâches. Une partie de l'inexpérience, une partie du manque de connaissance à 100% du fonctionnement de l'entreprise (et les clients ne savaient pas exactement ce qu'ils voulaient). Une nouvelle application (sous n'importe quelle forme) nous permettrait de créer une meilleure base tout en conservant toutes les connaissances de l'utilisateur. Mais, c'est un L O T de travail :) Donc, nous allons considérer toutes ces options ici. Comme certains d'entre vous l'ont mentionné, peut-être un client plus mince et une utilisation (un peu) de WCF ici et là pourrait être plus approprié.

Encore une fois, merci à tous!

Répondre

3

Il est préférable d'abandonner tous vos efforts de réutilisation du code de l'application de bureau lorsque vous recréez l'application Web. Voici les raisons:

  1. Les applications Web en particulier asp.net utilisent un modèle différent. Pour les débutants, notez que http est sans état. Chaque fois que le navigateur parle au serveur, vous devez envoyer explicitement le contenu actuel de tous les contrôles sur la page en cours. Vous n'auriez pas utilisé un tel modèle dans votre application Windows.

  2. Pour réduire la charge sur le réseau, vous souhaitez optimiser la taille de viewstate et la fréquence à laquelle vous effectuez des requêtes http. Encore une fois votre application de fenêtre existante n'a pas de telles dispositions.

  3. Mise à jour de la vue. Vous pouvez avoir différents gestionnaires d'événements, threads et quoi d'autre dans votre application Windows pour mettre à jour l'interface graphique dans différents scénarios. Tout cela devra être remplacé. Javascript est un animal totalement différent.

  4. Sécurité. Lorsque vous utilisez un navigateur, votre accès au disque local est très limité, alors que vous le considérerez comme acquis dans l'application Windows. S'il y a un code dans l'application Windows qui nécessite des ressources locales, alors cela va être un problème pour vous.

je recommande ce qui suit:

  • Vérifiez si votre application actuelle a des exigences d'accès disque local (par exemple lecture/écriture au fichier local, etc.). Lorsque vous écrivez les différents modules ou gestionnaires http, vous pouvez essayer de tirer parti de la partie backend/logique métier de l'application Windows existante.
  • Réfléchissez à la partie de votre application qui peut devenir un service Web.
+0

+1 pour mentionner que HTTP est sans état – jao

+0

Puisqu'il s'agit de la première réponse et qu'elle fournit d'excellentes informations, je l'accepte, mais tous les autres sont appréciés. Malheureusement, StackOverflow ne traite que les nombres entiers pour les réponses, nous ne pouvons pas fournir deux bonnes réponses: S –

2

Il semble que l'application nécessite beaucoup de refactoring pour le nettoyer. Si vous voulez passer à un modèle Web et avoir une réutilisation maximale, vous devrez vraiment le faire. Avant de passer à un modèle Web, je pense que vous devez comprendre s'il sera possible de répliquer votre interface utilisateur dans ce modèle. Est-ce votre argument de vente unique du point de vue du client? Vous voulez que les décisions de ce genre soient dictées par les utilisateurs plutôt que par des décisions purement techniques.

Il semble que votre application soit le candidat idéal pour une application client lourd, plutôt que pour le modèle Web du plus petit dénominateur commun.

Quelques choses à considérer:

  • Comment l'impact interface web l'interaction Tablet?
  • Quels nouveaux clients auront une version Web?
  • Les clients existants abandonneront-ils votre produit?
  • Avez-vous accès à des consultants ou des ressources externes avec les bonnes compétences pour vous guider dans la technologie web? Si vous ne le faites pas, vous pouvez compter sur StackOverflow ou d'autres ressources Web pour vous aider. Vous avez besoin d'un bon encadrement et d'une bonne orientation sur le terrain avec vous. Que se passe-t-il si vous commencez cet effort et que cela prend beaucoup plus de temps que prévu? Vous connaissez l'application, mais ne semblez pas que vous connaissez le Web. L'expérience passée montre que des réécritures massives comme celle-ci peuvent se terminer par un désastre (cela ne semble jamais si difficile au début)
  • Pouvez-vous écrire de nouvelles fonctionnalités dans une version Web?
  • Pourriez-vous passer au déploiement ClickOnce pour faciliter le déploiement de l'application auprès des clients. L'un des avantages du Web est le déploiement (zéro) plus facile. Pouvez-vous vous rapprocher de cela?
  • Serait-il plus facile de migrer vers WPF et de créer une application de navigateur avec cela?
  • Silverlight ou Flex peuvent être de meilleures options pour créer une expérience riche, et peuvent être plus accessibles pour les développeurs WinForms. Est-ce une possibilité?
+0

Bons points Brian, va les prendre en considération. Merci. –

0

Il semble que votre application. est l'un de ceux qui fonctionne le mieux comme une application de bureau. Bien que vous souhaitiez que vos utilisateurs puissent accéder à votre application. en utilisant un navigateur.

Je suggérerais de refactoriser autant que possible afin que l'interface graphique devienne plus propre et ne possède pas de "code". Lorsque vous avez fait cela, commencez à développer une application asp.net mvc mais gardez votre application de bureau. Vous devriez être capable d'utiliser toutes les couches, sauf la couche d'interface utilisateur, ce qui facilite/accélère/... Maintenant que mvc existe, je dirais que webforms est plus à propos de laisser les devs non-web faire du web. Mais vous savez le Web, en quelque sorte, et vous voulez le contrôle, alors mvc est le chemin à parcourir.