Wir haben ein schreckliches System in ASP.NET 2.0 geschrieben, dem wir einige Funktionen hinzufügen müssen. Das Problem besteht darin, dass ein bestimmtes Produkt über UI-Funktionen verfügt, die für Unternehmen aktiviert werden müssen, die nach einem bestimmten Datum gestartet wurden (und andere deaktiviert wurden), während die Seite für bestehende Unternehmen gleich angezeigt werden muss.
Ich dränge auf eine Neufassung der Seite für neue Unternehmen, da ich instinktiv die Idee datumsbasierter JavaScript-UI-Schalter und das Mischen von Websteuerelementen für alte und neue Unternehmen als "unordentlich" empfinde (aus Mangel an einem besseren Wort) ).
Ist die Praxis der zeitbasierten Benutzeroberfläche eine allgemein akzeptierte Praxis, und wenn nicht, welche Risiken sind bekannt, wenn diese Vorgehensweise verfolgt wird?
quelle
Antworten:
Es ist nichts Falsches daran, eine Benutzeroberfläche basierend darauf zu optimieren, welche Funktionen für einen Kunden aktiviert sind oder welche Bereitstellungstypen er ausgewählt hat, aber die Änderung sollte
(Beachten Sie, dass das Gegenteil - dis abling Funktionen nach einer gewissen Zeit - ist eine große no-no , wenn Sie klar kommuniziert haben , dass Sie eine zeitlich begrenzte Testversion verkaufst solche Erstellen. Zeitbomben unter anderen Umständen werden die Menschen hassen Sie schneller als fast alles andere.)
quelle
The UI has no business knowing the business rule about what was published when
- Okay, aber selbst Stack Exchange hat solche UI-Regeln. Beispielsweise wird der Link "Löschen" für andere Benutzer bei geschlossenen Fragen erst nach Ablauf von zwei Tagen angezeigt, und die Migrationsoption wird nach 60 Tagen deaktiviert.if (showDelete) { <button>delete</button> }
oderif ((post.date - today).days > 2) { <button>delete</button> }
?Die Anforderung selbst ist nicht problematisch, aber es gibt gute und schlechte Möglichkeiten, sie umzusetzen . Wenn Sie Code kopiert und überall eingefügt haben, sieht es so aus:
Das wird verrückt schwer zu pflegen sein, auch wenn es im Moment schneller zu sein scheint. Zum Beispiel möchten einige ältere Kunden vielleicht irgendwann den neuen Look. Vielleicht gibt es irgendwann eine dritte Konfiguration mit einem eigenen Stichtag.
Idealerweise soll diese if-Anweisung genau einmal in Ihrem Code erscheinen, vorzugsweise auf der Serverseite. Sie möchten jedoch auch vermeiden, nur die gesamte Anwendung zu duplizieren und Änderungen vorzunehmen. Finden Sie den gemeinsamen Code und faktorisieren Sie ihn. Erstellen Sie dann kleine separate Funktionen nur für die Teile, die unterschiedlich sind. Aktivieren oder deaktivieren Sie diese Funktionen dann von einem zentralen Ort aus.
quelle
Dies ist eine Anforderung, und obwohl es stinkend zu sein scheint - im Grunde genommen basiert die Konfiguration auf einem Datum / Uhrzeit-Wert -, gibt es keinen Grund, warum die Zeit nicht zum Ändern Ihrer Benutzeroberfläche verwendet werden kann. Das klassische Gehäuse ist ein Navigationsdisplay, das tagsüber von hellen Farben zu nachts zu einem dunklen Thema wechselt (und wenn Sie wirklich engagiert sind, zwischendurch zu einer gedämpften Farbe).
Als Verbesserung kann ich jedoch vorschlagen, das Konzept eines Datums zu entfernen, das die Steuerelemente aktiviert, jedoch eine Versionsnummer. Die Version legt die UI-Konfiguration fest (dh Sie haben ein Flag, das für NewCustomer konfiguriert ist, und können in Zukunft erweitert werden, um die zusätzlichen Steuerelemente zu berücksichtigen, die NewNewCustomer benötigt, und so weiter). Dies ist im Code viel einfacher zu handhaben und riecht viel besser.
Dann haben Sie nur ein Problem, bei dem die Versionsnummer anhand einiger Kriterien festgelegt wird. Dies kann durch eine heutige Datumsprüfung, möglicherweise eine serverseitige Konfigurationsoption später oder sogar durch ein Cookie erfolgen, das durch die Benutzeranmeldung festgelegt wird die Zukunft.
quelle
Dies scheint ein Sonderfall einer allgemeineren Frage zu sein: Ist es eine schlechte Praxis, Benutzeroberflächenfunktionen aus bestimmten Gründen gemäß vordefinierten Regeln zu deaktivieren? Die Antwort lautet also "natürlich nicht". Insbesondere die Übergabe von Daten kann schwierig sein, da Daten und Zeiten schwierig sind. Grundsätzlich gibt es jedoch keinen guten Grund, dies nicht zu tun, wenn dies Ihren geschäftlichen Anforderungen entspricht.
quelle
Wenn die Änderungen mit einem bestimmten Geschäftszweck zu tun haben, der datumsabhängig ist, ist dies ein notwendiges Übel.
Wenn es darum geht, eine Revision des Programms bereitzustellen, die das Programm dauerhaft ändert, und das alte Design nie wieder verwendet wird, ist es besser, einfach ein Update zum richtigen Zeitpunkt bereitzustellen.
quelle
Klingt gut. Es ist durchaus üblich, dass Benutzeroberflächen an unterschiedliche Benutzer angepasst werden, z. B. werden beim Stackoverflow verschiedene Funktionen basierend auf dem Karma eines einzelnen Benutzers aktiviert oder deaktiviert.
Der Grund, warum Sie es nicht mögen, ist, dass es offensichtlich die Komplexität einer Lösung erhöht, bei der jeder die gleiche Benutzeroberfläche sieht. Die Komplexität scheint jedoch eine wesentliche Komplexität zu sein , d. H. Es ist eine Geschäftsanforderung, kein Artefakt einer schlechten architektonischen Entscheidung. Natürlich hat es Kosten (die Sie dem Unternehmen mitteilen sollten), aber wenn das Unternehmen entscheidet, dass es die Kosten wert ist, setzen Sie es um.
Bekannte Risiken: Das größte Risiko besteht wahrscheinlich darin, die Benutzeroberfläche in den verschiedenen Konfigurationen testen zu lassen. Wenn Sie anfangen, UI-Funktionen für verschiedene Benutzergruppen zu aktivieren / deaktivieren, können Sie schnell eine Explosion möglicher Konfigurationen erhalten.
Sie sollten auch sicherstellen, dass die Einschränkungen in der Geschäftslogikschicht implementiert sind, damit Sie sicherstellen, dass Kunden keine Vorgänge ausführen können, die sie nicht ausführen dürfen, auch wenn die Benutzeroberfläche dies überhaupt nicht ermöglichen sollte:
quelle
Was Sie beschreiben, ist das Konzept der effektiven Datierung , das keineswegs eine neuartige Idee ist und im Kern eine Art zeitliches Problem darstellt, auf das Sie ein zeitliches Muster anwenden können .
Im Wesentlichen , was würden Sie in Ihrer Datenbank zu tun ist , ein Datum des Inkrafttretens gelten entweder Form Module oder Form Versionen (hier als Komponenten), die Speicherung einige Metadaten über diese Komponenten und deren effektive Start- / Enddaten. Natürlich benötigen Sie auch einige Daten zu Ihren Benutzern in der Anwendung.
Es hört sich so an, als hätten Sie andere zwingende Gründe, diese Anwendung neu zu schreiben. Wenn effektive Dating-Probleme Ihre einzigen Probleme sind, würde ich vorschlagen, dass die Implementierung von effektivem Dating möglicherweise eine bessere Option ist. Wenn nicht, müssen Sie dies anhand Ihres Szenarios bewerten.
quelle
Es ist eine Funktion, bei der die Aktivierung basierend auf dem Datum umgeschaltet wird - was vollkommen gültig ist. Stellen Sie sich vor, die Funktion würde nur während eines Werbezeitraums verwendet oder müsste beendet werden, wenn zu einem bestimmten Zeitpunkt eine neue Regierungsverordnung in Kraft tritt.
Sie arbeiten in APS.NET und JavaScript, aber das Java-Feature-Toggle-Frame-Werk Togglz verfügt speziell über eine auf Datum (und Uhrzeit!) Basierte Aktivierungsregel .
quelle