Der Ort der AufzÀhlung in der sich verÀndernden Welt von heute


Zum Beispiel haben wir ein Computerspiel mit verschiedenen Charakteren. Das Geschlecht des Charakters wird im Feld Geschlecht gespeichert. Sie können dieses Feld als Ganzzahl oder als Zeichenfolge definieren. Ein guter Programmierer ist jedoch bestrebt, den falschen Status von Objekten unaussprechlich zu machen, und wird daher höchstwahrscheinlich eine AufzĂ€hlung fĂŒr die Etage beginnen. Jetzt einen Charakter mit dem falschen Geschlecht zu machen ist einfach unmöglich!


Und im Spiel gibt es eine Datenbank, in der alle Spieler gespeichert sind, und dort mĂŒssen Sie auch aufzeichnen, welches Geschlecht sie haben. Es wĂ€re schön zu verhindern, dass ein Charakter mit einem falschen Geschlecht in die Datenbank aufgenommen wird, da damit nicht nur der Code funktioniert, in dem nichts außer Enum fĂŒr die Geschlechter, sondern auch fĂŒr lebende Menschen vorgesehen ist. Und lebende Menschen bemĂŒhen sich, wie Sie wissen, in die Datenbank das einzutragen, was dort nicht eingegeben werden muss.


GlĂŒcklicherweise ist es in vielen DBMS, insbesondere in solchen FĂ€llen, auch möglich, Spalten des AufzĂ€hlungstyps zu erstellen, wodurch der Wertebereich eingeschrĂ€nkt wird, den die Daten in einer solchen Spalte haben können. Was nutzt ein erfahrener Entwickler, der nicht möchte, dass sein Projekt etwas ist, das nichts fĂŒr Feng Shui ist?


Auf dem Client ist der Programmierer auch kein Dummkopf und weiß auch, dass falsche ZustĂ€nde unaussprechlich sein mĂŒssen, und dafĂŒr muss das Geschlecht des Zeichens aufgezĂ€hlt werden.


Perfekt!


Wenn Sie jedoch genau hinschauen, können Sie einen kleinen Fehler finden, der letztendlich zu Problemen fĂŒhrt. Das Feld, in dem der Boden gespeichert ist, heißt nicht Geschlecht, sondern Geschlecht. Das bedeutet, dass bereits ein Spieledesigner dafĂŒr ausgewĂ€hlt ist. FrĂŒher oder spĂ€ter wird er feststellen, dass es im Gegensatz zu den Geschlechtern wesentlich mehr als zwei Geschlechter gibt, und er wird das Geschlecht GENERIC_TEEN hinzufĂŒgen wollen. Dann wird jeder dumm.


Der Client muss stÀndig aktualisiert werden


Die ersten, die fallen, sind die Leute, die den Client-Code geschrieben haben, weil bei jedem Niesen falsche Werte des Gender-Parameters vom Server kommen. Und wenn ein Charakter mit einem Geschlecht vom Server kommt, ĂŒber dessen Existenz der Client nichts weiß, wird das Spiel, wie es der Programmierer auf dem Client wollte, einfach nicht gestartet. Jetzt, mit dem Aufkommen neuer Geschlechter, ist es notwendig, neue Versionen von Clients zu veröffentlichen und erzwungene Updates zu starten, die wir alle so lieben.


Auf dem Enum-Server ist dies eine gute Sache, denn wenn dort ein unbekannter Wert gefunden wird, ist dies eindeutig ein Fehler, der gefunden und behoben werden muss. Auf dem Client ist das Auftreten eines unbekannten Werts jedoch eine normale Situation, die regelmĂ€ĂŸig auf veralteten Versionen des Clients auftritt da ist enum böse, das so schnell wie möglich ausgerottet und vernichtet werden muss.


Neuer Code kann nicht mit der alten Datenbank verwendet werden


Außerdem sollte nach den Empfehlungen der besten HundezĂŒchter der neue Code mit dem alten Datenschema funktionieren können, und hier stellt sich heraus, dass das gesamte System nur dann auseinanderfallen kann, wenn dem Code ein neues Geschlecht hinzugefĂŒgt wird.


Daher stört uns die AufzĂ€hlung in der Datenbank, und in diesem Fall mĂŒssen wir in den Feldern Zeichenfolgen oder Ints oder was auch immer speichern, in die Sie bei Bedarf einen Wert schreiben können, der nicht im Voraus bereitgestellt wird.


Und jemand wird sagen: Okay, okay, es schadet dem Enum-Client und in der Datenbank stört es mehr als es hilft, aber Enum ist im Server-Code von großem Vorteil. Er wird nicht anbieten, Enum aus dem Code auf dem Server zu entfernen? Wird sein!


Alter Code kann nicht mit der neuen Datenbank verwendet werden


Jetzt ist der Programmierer ist es empfehlenswert, nicht nur um den Code zu schreiben, so dass es richtig mit der alten Datenbank arbeitet, sondern auch Datenschema zu entwickeln, so dass ein wenig von Legacy-Code auch richtig es funktionieren könnte.


Und wenn Sie enum auf dem Server fĂŒr das Geschlecht verwenden, fĂ€llt alles wieder auseinander, erst wenn sich herausstellt, dass etwas mit dem neuen Code nicht stimmt und Sie sofort alles auf die vorherige Version zurĂŒcksetzen mĂŒssen und die neuen Geschlechter bereits in die Datenbank eingegangen sind.


Und deshalb gehen die AufzĂ€hlungen vom Servercode mit dem Schritt eines gemessenen Soldaten irgendwo in Richtung des nĂ€chsten Waldes, um von dort niemals zurĂŒckzukehren, denn alles, was das System zur falschen Zeit zerstören kann, ist böse und das Böse hat keinen Platz in unserem gemĂŒtlichen Code.


Also vielleicht auf Enum hÀmmern und immer Strings verwenden?


Kurz gesagt, wie Winnie the Pooh sagen wĂŒrde - das ist eine Art falscher Enamie, und sie provozieren den Programmierer, den falschen Code zu schreiben! In enum, mĂŒssen Sie wirklich unerschĂŒtterliche und grundlegende Dinge, die sich im Laufe der Jahre nicht geĂ€ndert haben, und keine Geschlechter, die jede Veröffentlichung hinzufĂŒgen und verschwinden lassen! Jede Aufgabe hat ein eigenes Werkzeug, und enum ist nicht das Werkzeug, mit dem Sie Werte speichern mĂŒssen, deren mögliches Spektrum stĂ€ndig erweitert wird.


Wenn eine Variable nur einige zuvor bekannte Werte annehmen kann und alles, was nicht in diesen Werten enthalten ist, zu einem Fehler fĂŒhren sollte, ist die Verwendung von Enum eine gute Idee. Wenn dies jedoch nicht der Fall ist, verwenden Sie, wenn die unerwarteten Werte regelmĂ€ĂŸig in die Variable fallen enum ist gleichbedeutend damit, sich in den Fuß zu schießen, und es ist besser, dies nicht zu tun, es sei denn, Sie sind natĂŒrlich ein Masochist.


Diese besondere Situation ist interessant, da nichts die HinzufĂŒgung neuer Werte in die AufzĂ€hlung ankĂŒndigte, ganz zu schweigen von der Tatsache, dass regelmĂ€ĂŸig neue Werte erscheinen werden. Woher wussten wir ĂŒberhaupt, dass es mehr als zwei Geschlechter geben wĂŒrde?


Daher ist nach dem KISS-Prinzip die AufzĂ€hlung in der ersten Stufe eine gute und richtige Wahl. Ein erfahrener Programmierer fĂŒhrt eine AufzĂ€hlung durch und korrigiert, dass Sie, wenn ein zusĂ€tzlicher Wert angezeigt wird, sofort die Ereignisse ausfĂŒhren mĂŒssen, die erforderlich sind, damit die AufzĂ€hlung aus dem Code verschwindet.


Leider zeigt die Praxis, dass in der RealitĂ€t jemand anderes daran beteiligt sein wird, ein neues Geschlecht hinzuzufĂŒgen, und ohne darĂŒber nachzudenken, wird er der AufzĂ€hlung eine neue Bedeutung hinzufĂŒgen, was sich beruhigen wird. Im Zweifelsfall ist es also besser, eine einfache Regel zu befolgen: Sie wird an einem anderen Ort gespeichert, mit Ausnahme des Codes. Das bedeutet nicht, dass eine AufzĂ€hlung vorliegt, und genau darum geht es.


Die AufzĂ€hlung sollte also ĂŒberhaupt nicht im geschlechtsspezifischen Code enthalten sein?


Trotz der Tatsache, dass ich gerade sagte, kann die AufzĂ€hlung im Code immer noch sehr nĂŒtzlich sein, auch wenn sie Werte enthĂ€lt, die in die Datenbank fallen. Sie mĂŒssen nicht nur verwendet werden, um die aus der Datenbank abgerufenen Werte zu speichern, sondern auch, um die Daten aus der Datenbank mit dem gewĂŒnschten Wert zu vergleichen. Wenn ein Programmierer beispielsweise schreiben möchte, dass das Geschlecht des Zeichens GENERIC_TEEN ist und er keinen Alkohol in sein Inventar aufnehmen kann, können Sie eine AufzĂ€hlung Gender mit der Wertemethode erstellen, die eine Zeichenfolge zurĂŒckgibt, und einen Code schreiben, der prĂŒft, ob das Zeichen ein Feld gender und Gender.GENERIC_TEEN enthĂ€lt .value () und das ist gut, weil es dem Programmierer nicht erlaubt, einen Fehler im Statuswert zu machen.


Code muss sich weiterentwickeln


Entscheidungen, die uns irgendwann gute Dienste geleistet haben, werden mit der Zeit möglicherweise unangenehm. Und Sie mĂŒssen sicherstellen, dass der Code den aktuellen Stand des Projekts widerspiegelt, und nicht eine Reihe von KrĂŒcken, mit denen die Lösung, die vor ein paar Jahren am Knie erstellt wurde, bis zum "Hier und Jetzt" reicht. Andernfalls wird es eine unerschöpfliche Quelle von Fakap und Lulz fĂŒr alle, die in irgendeiner Weise mit dem Projekt verbunden sind, ob Entwickler, Tester oder Direktverbraucher.

Source: https://habr.com/ru/post/de476650/


All Articles