Nous avons un système horrible écrit en ASP.NET 2.0 auquel nous devons ajouter des fonctionnalités. Le problème est qu'un certain produit possède des fonctionnalités d'interface utilisateur qui doivent être activées pour les entreprises lancées après une certaine date (et d'autres désactivées), tandis que la page doit être identique pour les entreprises existantes.
Je pousse à une réécriture de la page pour les nouvelles entreprises car je trouve instinctivement l'idée de commutateurs d'interface utilisateur JavaScript basés sur la date, et le mélange des contrôles Web pour l'ancienne et la nouvelle entreprise est "désordonné" (à défaut d'un meilleur mot) ).
La pratique de disposer d'une interface utilisateur basée sur le temps est-elle une pratique largement acceptée, et sinon, quels sont les risques connus de poursuivre cette ligne de conduite?
Réponses:
Il n'y a rien de mal à modifier une interface utilisateur en fonction des fonctionnalités activées pour un client ou des types de déploiement qu'ils ont choisis, mais le changement devrait
(Notez que l'opposé - désactiver les fonctionnalités après un certain temps - est un non-non majeur à moins que vous n'ayez clairement indiqué que vous vendez une version d'essai limitée dans le temps. La création de telles bombes à retardement dans toute autre circonstance incitera les gens à la haine vous plus rapidement que presque toute autre chose.)
la source
The UI has no business knowing the business rule about what was published when
- D'accord, mais même Stack Exchange a de telles règles d'interface utilisateur. Par exemple, le lien "supprimer" n'apparaît pas pour les autres utilisateurs sur les questions fermées avant que deux jours ne se soient écoulés et l'option de migration est désactivée après 60 jours.if (showDelete) { <button>delete</button> }
ouif ((post.date - today).days > 2) { <button>delete</button> }
?L'exigence elle-même n'est pas problématique, mais il existe de bonnes et de mauvaises façons de la mettre en œuvre . Si vous avez copié et collé du code partout, cela ressemble à:
Cela va être difficile à maintenir, même si cela semble plus rapide pour le moment. Par exemple, à un moment donné, certains clients plus âgés voudront le nouveau look. Peut-être qu'à un moment donné, il y aura une troisième configuration avec sa propre date limite.
Idéalement, vous voulez que cette instruction if apparaisse exactement une fois dans votre code, de préférence côté serveur. Cependant, vous devez également éviter de simplement dupliquer l'application entière et apporter des modifications. Trouvez le code commun et factorisez-le, puis créez de petites fonctions distinctes pour les parties qui sont différentes. Activez ou désactivez ensuite ces fonctions à partir d'un emplacement central.
la source
C'est une exigence, et bien qu'il semble malodorant - essentiellement une configuration basée sur une valeur datetime - il n'y a aucune raison pour que le temps ne puisse pas être utilisé pour modifier votre interface utilisateur. Le boîtier classique est un écran de satnav qui passe de couleurs vives pendant la journée à un thème sombre la nuit (et si vous êtes vraiment dédié, une couleur en sourdine entre les deux).
Cependant, une chose que je peux suggérer comme amélioration est de supprimer le concept d'une date qui active les contrôles, mais un numéro de version. La version définit la configuration de l'interface utilisateur (c'est-à-dire que vous avez un indicateur à dire configuré pour NewCustomer, et à l'avenir peut être étendu pour répondre aux contrôles supplémentaires que NewNewCustomer veut, et ainsi de suite). Ceci est beaucoup plus facile à gérer dans le code et sent beaucoup plus agréable.
Ensuite, vous n'avez qu'un seul problème qui définit le numéro de version en fonction de certains critères, et cela peut être fait par une vérification de la date aujourd'hui, peut-être une option de configuration côté serveur plus tard, ou même un cookie qui est défini par la connexion de l'utilisateur à un moment donné dans l'avenir.
la source
Cela ressemble à un cas particulier d'une question plus générale: est-ce une mauvaise pratique de désactiver les fonctionnalités de l'interface utilisateur pour des raisons spécifiques selon des règles prédéfinies? La réponse est donc «bien sûr que non». La remise des dates en particulier peut être délicate car les dates et les heures sont difficiles , mais en principe, il n'y a aucune bonne raison de ne pas le faire si c'est ce que vos besoins commerciaux exigent.
la source
Si les changements ont à voir avec un objectif commercial spécifique qui est sensible à la date, alors c'est un mal nécessaire.
S'il s'agit de déployer une révision du programme qui modifiera le programme de façon permanente et que l'ancienne conception ne sera plus jamais utilisée, il est préférable de simplement déployer une mise à jour au bon moment.
la source
Sonne bien. Il est assez courant que l'interface utilisateur s'adapte à différents utilisateurs, par exemple ici sur stackoverflow, différentes fonctionnalités sont activées ou désactivées en fonction du karma d'un utilisateur individuel.
La raison pour laquelle vous ne l'aimez pas est qu'elle ajoute évidemment de la complexité par rapport à une solution où tout le monde voit la même interface utilisateur. Cependant, la complexité semble être une complexité essentielle , à savoir. c'est une exigence commerciale, pas un artefact d'une mauvaise décision architecturale. Bien sûr, cela aura un coût (que vous devez communiquer à l'entreprise), mais si l'entreprise décide que cela en vaut la peine, vous allez le mettre en œuvre.
Risques connus: Le plus grand risque est probablement de faire tester l'interface utilisateur dans les différentes configurations. Si vous commencez à activer / désactiver les fonctionnalités de l'interface utilisateur pour différents groupes d'utilisateurs, vous pouvez rapidement obtenir une explosion de configurations possibles.
Vous devez également vous assurer d'implémenter les restrictions dans la couche logique métier, afin de vérifier que les clients ne peuvent pas effectuer des opérations auxquelles ils ne sont pas autorisés, même si l'interface utilisateur ne doit pas le permettre en premier lieu:
la source
Ce que vous décrivez est le concept de datation efficace , qui n'est en aucun cas une idée nouvelle et à la base un type de problème temporel auquel vous pourriez appliquer un modèle temporel .
Essentiellement, ce que vous feriez dans votre base de données est d'appliquer une date d'entrée en vigueur aux modules de formulaire ou aux versions de formulaire (appelés ici composants), en stockant certaines métadonnées sur ces composants et leurs dates de début / fin effectives. Vous aurez bien sûr également besoin de données sur vos utilisateurs dans l'application.
Il semble que vous ayez d'autres raisons plus convaincantes d'envisager de réécrire cette application. Si les problèmes de rencontres efficaces sont vos seuls problèmes, je dirais que peut-être la mise en œuvre de rencontres efficaces est une meilleure option. Sinon, vous devrez évaluer cela en fonction de votre scénario.
la source
C'est une fonction qui bascule avec l'activation en fonction de la date - ce qui est parfaitement valable. Imaginez si la fonctionnalité était uniquement destinée à être utilisée pendant une période promotionnelle, ou devait se terminer lorsqu'un nouveau règlement gouvernemental entre en vigueur à une certaine date.
Vous travaillez dans APS.NET et JavaScript, mais le cadre de basculement des fonctionnalités Java Togglz a spécifiquement une règle d'activation basée sur la date (et l'heure!) .
la source