7

Beaucoup de gens ont en tête des startups en ligne qui peuvent potentiellement attirer des millions, mais la plupart du temps vous aurez seulement un budget minimum (temps et ressources) pour commencer, donc vous voulez avoir il a livré dans un an. Peu de temps après le lancement, vous devez exécuter une ou plusieurs mises à niveau qui peuvent inclure: refactoriser le code vers une fondation plus récente, ajouter une hiérarchie (s) dans l'architecture logicielle ou restructurer la ou les bases de données. Ce cycle de mise à niveau/refactor continue comme:Une approche évolutive pour concevoir un système d'application web

  • Nouvelles fonctions disponibles dans la dernière version de la/les langue (s)/framework (s) que vous utilisez.
  • Disponibilité de nouveaux composants/frameworks/plugins susceptibles d'améliorer le produit.
  • Besoin a changé sa direction, le produit existant n'a pas été conçu pour faire face aux nouveaux besoins.

Avec ci-dessus comme condition sine qua non, je veux profiter de cette discussion sérieuse et identifier l'essence d'une solution pour upgradable une application web. Dans la discussion, vous pouvez parler de tous les stades de développement (initiale, au début de la mise à niveau, upgardes incrémentales) et couvrir un ou plusieurs des éléments suivants:

  • Choix de la langue (s) pour une application Web.
  • Décision d'utiliser un cadre ou non? (Considérez le surcoût)
  • Choix du SGBD et de sa conception
  • Choix du (des) matériel (s) et des configurations?
  • stratégie à l'évolution constante des besoins (qui peut être un naturel d'application Web)
  • Stratégie/décision vers la refonte totale

Répondre

5

La solution Web de notre société est sur sa quatrième génération majeure, ayant considérablement évolué au cours des 8 dernières années. La génération la plus récente a présenté une grande variété de constructions pour aider exactement à cette tâche car il devenait difficile de mettre à jour la génération précédente en fonction des nouvelles demandes des clients. Ainsi, j'ai passé pas mal de temps en 2009 à penser exactement à ce problème.

La seule chose que vous pouvez faire est de employer une approche Agile pour construire un logiciel. En particulier, vous devriez maintenir un environnement dans lequel une nouvelle construction peut être (et est) créée quotidiennement. Bien que les constructions quotidiennes ne soient qu'un aspect d'Agile, c'est la pratique la plus importante pour répondre à votre question. Bien que ce ne soit pas la même chose que l'évolutivité, elle introduit néanmoins une discipline dans le processus qui aide à réduire la possibilité que votre base de code devienne lourde (ou que vous deveniez Architect Astronaut).

En ce qui cadres et langues aller, il y a deux exigences principales: que le cadre soit à long terme et stable et que l'environnement d'un soutien Separation of Concerns. ASP.NET a bien fonctionné pour moi à cet égard: il a évolué de manière rationnelle et sans discontinuités qui invalident le code plus ancien. J'utilise une couche de logique métier distincte pour gérer le SoC, mais ASP.NET supporte désormais aussi le développement de MVC.En revanche, je suis venu à ne pas aimer PHP après quelques mois de travail avec lui parce que cela semblait encourager les pratiques désordonnées qui mettraient en danger les futures mises à jour.

En ce qui concerne Sélection de SGBD, tout RDMS moderne (SQL Server, MySQL, Oracle) vous sera très utile. Voici la clé cependant: vous devrez besoin de maintenir des scripts DDL pour la gestion des mises à niveau. C'est juste une réalité de la vie. Alors, comment faites-vous ce processus un tractable? L'outil le plus précieux de tout développeur tiers est ma copie de SQL Compare de Red Gate. Ce processus était un cauchemar complet et un frein significatif à ma capacité à faire évoluer mon code jusqu'à ce que je trouve cet outil. Ainsi, la recommandation générique est d'utiliser une base de données pour laquelle un outil existe pour comparer les structures de base de données. SQL Server est juste très chanceux à cet égard.

Matériel est presque un ne s'en soucie pas. Vous pouvez toujours passer à un nouveau matériel tant que votre processus de développement inclut un processus de génération de version raisonnable.

Stratégie pour des changements constants dans les exigences. Encore une fois, voir Agile. Je vous encourage à ne plus les considérer comme des «exigences» - au sens traditionnel d'un grand document rempli de spécifications. Agile change cela de manière importante. Je ne conserve pas non plus un document d'exigences, sauf lorsque je travaille sur contrat pour un client externe payant, afin que je puisse être assuré de la facturation appropriée et éviter le fluage des fonctionnalités. À ce stade, notre processus interne est si rapide et fluide que les rapports de notre logiciel de gestion des bogues/fonctionnalités (FogBugz si vous voulez savoir) nous servent de documentation lors de la documentation d'une nouvelle version pour le marketing.

La stratégie/décision pour la refonte totale est: ne pas. Si vous mettez un degré raisonnable de réflexion dans le processus que vous utiliserez, choisissez les outils courants, et appliquez une Séparation des Préoccupations alors rien de moins qu'un abandon complet de HTTP et de SGBDR devrait entraîner une refonte totale.

Si vous êtes assez agile quoi que ce soit peut changement, vous êtes probablement jamais dans une position où tout doit changement.

+1

Grande réponse: –

+0

+1 belle explication. En outre, l'évolution de la technologie joue également un rôle dans l'approche de la gradation.Car si l'on voit qu'une nouvelle technologie serait disponible dans un an environ, faut-il attendre ou opter pour une mise à niveau basée sur la technologie actuelle? – HotTester

+0

HotTester - cela dépend de la technologie. En règle générale, je préfère une approche «attentiste» aux nouvelles technologies uniquement parce que j'ai été brûlé une ou deux fois pour me lancer dans une technologie qui finit par ne plus être acceptée par mes clients. Cela dit, je * suis * en train d'utiliser Visual Studio 2010 (qui n'est pas officiellement publié) et je suis toujours à la recherche de nouvelles technologies, juste parce que j'aime. –

1

Pour obtenir le roulement à billes, je l'aurais pensé un langage/cadre qui soutient le concept d'injection de dépendance (ou inversion de contrôle comme on le dit aujourd'hui) serait en haut de la liste.

+2

Remarque: L'IoC est * pas * l'injection de dépendances. DI est un "genre de" IoC. Voir http://garyshortor.web140.discountasp.net/blog/archive/2008/02/05/inversion-of-control-not-di.aspx – VonC

+0

@VonC - Vous vivez et apprenez. :-) Merci pour l'information. –

+0

http://bradleyboveinis.com/post/2009/09/03/Inversion-of-Control-vs-Dependency-Injection.aspx est aussi intéressant, sur ce sujet qui est "DI et IoC" – VonC

0

Vous découvrirez que la technologie SGBDR n'est pas facilement évolutive. Tous les fournisseurs vous le diront encore quand vous essayez plusieurs serveurs et l'équilibrage de charge les limites inhérentes apparaîtront. Tout le reste peut être renforcé avec du "plus gros fer" et peut être un code plus efficace mais les bases de données ne peuvent pas être divisées et distribuées facilement.

Nous espérons que les applications Web stimuleront l'innovation dans les technologies de base de données et nous aideront à sortir de l'état d'esprit des modèles relationnels archaïques. Il est longtemps attendu.

Je recommande d'accorder beaucoup d'attention à ce lien faible dès le début.

Questions connexes