Meine Frage mag sehr wissenschaftlich erscheinen, aber ich denke, es ist ein häufiges Problem, und erfahrene Entwickler und Programmierer werden hoffentlich einen Rat haben, um das im Titel erwähnte Problem zu vermeiden. Übrigens ist das, was ich unten beschreibe, ein echtes Problem, das ich in meinem iOS-Projekt proaktiv zu lösen versuche. Ich möchte es auf jeden Fall vermeiden.
Mit Zustandsautomat meine ich Folgendes:> Ich habe eine Benutzeroberfläche mit einigen Schaltflächen, mehreren Sitzungszuständen, die für diese Benutzeroberfläche relevant sind, und was diese Benutzeroberfläche darstellt. Ich habe einige Daten, deren Werte teilweise in der Benutzeroberfläche angezeigt werden. Ich empfange und behandle einige externe Trigger (dargestellt durch Rückrufe von Sensoren). Ich habe Zustandsdiagramme erstellt, um die relevanten Szenarien, die in dieser Benutzeroberfläche und Anwendung wünschenswert und zulässig sind, besser abzubilden. Während ich den Code langsam implementiere, verhält sich die App immer mehr so, wie es sein sollte. Ich bin jedoch nicht sehr zuversichtlich, dass es robust genug ist. Meine Zweifel kommen von der Beobachtung meines eigenen Denk- und Umsetzungsprozesses. Ich war zuversichtlich, dass ich alles abgedeckt hatte, aber es war genug, um ein paar rohe Tests in der Benutzeroberfläche durchzuführen, und ich erkannte schnell, dass es immer noch Lücken im Verhalten gibt. Ich habe sie geflickt. Jedoch, Da jede Komponente von der Eingabe einer anderen Komponente abhängt und sich entsprechend verhält, löst eine bestimmte Eingabe eines Benutzers oder einer externen Quelle eine Kette von Ereignissen, Statusänderungen usw. aus. Ich habe mehrere Komponenten und jedes verhält sich so. Trigger empfangen am Eingang -> Trigger und sein Absender analysiert -> etwas (eine Nachricht, eine Zustandsänderung) basierend auf der Analyse ausgeben
Das Problem ist, dass dies nicht vollständig eigenständig ist und dass meine Komponenten (ein Datenbankelement, ein Sitzungsstatus, der Status einiger Schaltflächen) außerhalb des Bereichs der Ereigniskette oder nicht geändert, beeinflusst, gelöscht oder anderweitig modifiziert werden KÖNNTEN wünschenswertes Szenario. (Das Telefon stürzt ab, der Akku ist leer. Das Telefon schaltet sich plötzlich aus.) Dies führt zu einer ungültigen Situation im System, von der das System möglicherweise NICHT mehr wiederhergestellt werden kann. Ich sehe dies (obwohl die Leute nicht erkennen, dass dies das Problem ist) in vielen Apps meiner Konkurrenten, die im Apple Store erhältlich sind. Kunden schreiben solche Dinge> "Ich habe drei Dokumente hinzugefügt, und nachdem ich dorthin gegangen bin, kann ich sie nicht öffnen. auch wenn man sie sieht. " oder "Ich habe jeden Tag Videos aufgenommen, aber nachdem ich ein zu protokolliertes Video aufgenommen habe, kann ich keine Untertitel mehr deaktivieren. Und die Schaltfläche für Untertitel funktioniert nicht."
Dies sind nur verkürzte Beispiele, Kunden beschreiben sie häufig detaillierter. Aufgrund der in ihnen beschriebenen Beschreibungen und Verhaltensweisen gehe ich davon aus, dass die jeweilige App eine FSM-Aufschlüsselung aufweist.
Die ultimative Frage ist also, wie ich das vermeiden kann und wie man das System davor schützt, sich selbst zu blockieren.
BEARBEITEN> Ich spreche im Kontext der Ansicht eines Viewcontrollers am Telefon, ich meine einen Teil der Anwendung. Ich verstehe das MVC-Muster. Ich habe separate Module für unterschiedliche Funktionen. Alles, was ich beschreibe, ist für einen Canvas auf der Benutzeroberfläche relevant.