Sollte die interne Benennung (Klassen, Methoden, Datenbanktabellen usw.) von Entitäten geändert werden, wenn sich die Benennung für Marketing und Benutzeroberfläche ändert?


20

Wir haben ein langlebiges Produkt für ungefähr 8 Jahre jetzt gehabt. Im Laufe der Zeit ändern sich die Namen von Konzepten und Entitäten. Sollen wir die Arbeit investieren, um alle Codebasis- und Datenbanktabellen und -spalten so umzubenennen, dass sie diesen neuen Namen entsprechen?

Gibt es eine Studie zu diesem Thema oder einige veröffentlichte Best Practices?

Vielen Dank

Antworten:


6

Die Nichtübereinstimmung zwischen internen und externen Namen riecht definitiv. Wie Rinzwind betont, riechen die Homophone und Synonyme am schlechtesten.

Die eigentliche Frage, die Sie beantworten müssen, lautet: Welches Verhältnis zwischen Kosten und Nutzen besteht bei der Durchführung der Änderung?

Die Kosten für das Nichtverändern sind eine steilere Lernkurve für neue Teammitglieder und eine erhöhte Wahrscheinlichkeit zukünftiger Fehler. Die Kosten für die Änderung sind der offensichtliche Zeitaufwand, eine neue Lernkurve für Oldtimer im Projekt und die Möglichkeit neuer Fehler.

Wenn Sie eine relativ große Anzahl neuer Teammitglieder erwarten, ist es mit größerer Wahrscheinlichkeit sinnvoll, die Änderung vorzunehmen. Wenn Sie keinen Umsatz erwarten, das aktuelle Team nicht verwirrt ist und das Team mit dem Status Quo zufrieden ist, ist es nicht wirklich sinnvoll, Dinge umzubenennen.


Ich würde vorschlagen, dass die derzeitigen Mitglieder des Teams die "vermarkteten" Namen sicherlich kennen und daher nicht von einer Änderung betroffen wären. Durch Suchen und Ersetzen sind diese Änderungen nahezu schmerzlos.
Matthieu M.

@Matthieu Search & Replace- oder Refactoring-Tools machen die anfängliche Änderung relativ einfach, aber alte Gewohnheiten verschwinden und die Teammitglieder werden wahrscheinlich noch eine Weile über die alten internen Namen nachdenken.
Jimreed

Was ist mit Datenbanktabellen? Es ist leicht , sie zu benennen , aber dann müssen Sie ein Upgrade - Prozess implementieren , die Fremdschlüssel enthalten kann und was nicht
Mark

2

Wenn erwartet wird, dass der Code für eine lange Zeit gültig ist und neue Entwickler daran arbeiten, würde ich die Änderungen vornehmen.

Es kann sehr verwirrend und zeitaufwändig sein, wenn ein neuer Entwickler in ein Projekt eintritt und feststellt, dass die Namen von Entitäten irreführend sind.

Es gibt auch das gültige Argument von ... Wenn es nicht kaputt ist, beheben Sie es nicht.


2

In Bezug auf Ihre zweite Frage sind mir keine veröffentlichten Studien oder Best Practices bekannt. In Bezug auf die erste Frage kann ich einige Beobachtungen aus persönlicher Erfahrung mit einem ähnlichen langlebigen Produkt machen, bei denen die Namen "intern" und "extern" manchmal unterschiedlich sind.

Die Namen, die ich wirklich gerne reparieren würde, sind die "Homophone", bei denen ein Name sowohl intern als auch extern für verschiedene Dinge verwendet wird. Dies kann sehr verwirrend sein, insbesondere wenn die beiden Dinge nicht völlig verschieden sind (so dass der Kontext die Begriffsklärung erleichtert). Ein (abstrahiertes) Beispiel dafür ist meiner persönlichen Erfahrung nach, dass Sie intern so etwas wie Fooeine Sammlung von Mehrfachen haben FooEntity; äußerlich ist nur letzteres sichtbar und wird als "Foo" bezeichnet. Ich habe eine Weile gebraucht, um herauszufinden, dass das Kundenhandbuch, als es von mehreren "Foo" sprach, tatsächlich mehrere FooEntity(in einem einzigen Foo) bedeutete, wenn das für Sie noch Sinn macht.

Zweitens möchte ich alle "Synonyme" korrigieren, bei denen intern ein externer Name verwendet wurde. Wie bei Variablennamen, Teilen von Methoden- / Funktionsnamen usw. Dies passiert häufig, wenn Entwickler etwas direkt aus einer Kundenanforderungsbeschreibung implementieren und vergessen, die Namen zu "übersetzen". Sobald dies passiert, wird der „falsche“ Name ebenfalls verbreitet, da andere Entwickler zufällig einen Teil des Codes kopieren / einfügen, um ihn beispielsweise als Vorlage für neuen Code zu verwenden. Diese Synonyme sind nicht so verwirrend, aber sie können ärgerlich sein, da Sie beim Durchsuchen des Codes nach Verweisen Barmöglicherweise bedenken müssen, dass einige Teile darauf verweisen könnenQuxSie müssen also zweimal suchen. (Dies kann jedoch in dynamisch getippten Sprachen schlimmer sein als in statischen, da Sie nach Teilen des Namens von Variablen / Funktionen / ... suchen müssen, anstatt nach dem Namen ihres Typs.) Wie im umgekehrten Fall von „Synonymen“ “, Bei dem ein interner Name extern verwendet wurde: Dies kommt in der Regel nicht so häufig vor, da die Mitarbeiter des Kundensupports die internen Namen in der Regel weniger kennen, obwohl ich davon ausgehe, dass dies für die Kunden verwirrend ist.

Wenn Sie zumindest die beiden oben genannten Situationen vermeiden oder beheben können, bin ich mir nicht sicher, ob Sie so weit gehen sollten, dass alle internen Namen mit den externen Namen identisch sind. Es gibt wahrscheinlich einen guten Grund, warum die internen Namen auch nicht geändert wurden, als der externe von dem internen Namen abweichend gemacht wurde. Meiner persönlichen Erfahrung nach ist dies ein guter Grund, ältere Versionen des Produkts zu unterstützen. Es könnte schwierig werden, eine Fehlerbehebung von einer Version vor der Namensbereinigung auf die neueste Version zusammenzuführen, wenn viel Code geändert werden muss.


2

Es ist ein ziemlich häufiges Problem. Eine Reihe von Projekten, an denen ich gearbeitet habe, verwenden Codenamen anstelle von Produktnamen (über die zu diesem Zeitpunkt möglicherweise noch nicht entschieden wurde) und verwenden im Code eine völlig andere Terminologie als die, die dem Benutzer angezeigt wird. Ich würde die Dinge wahrscheinlich so lassen, wie sie sind, es sei denn, Sie werden den Code massiv umgestalten oder es gibt etwas Spezielles, das Probleme verursacht. Keine Verwendung beim Stören des Apfelwagens. Und wer sagt in 5 Jahren, dass es keine Änderungen mehr geben wird? Und dann müssten Sie die Umbenennung erneut durchführen. Und vergessen Sie nicht, dass dies auch die separate Codedokumentation betrifft, die Sie möglicherweise haben (veröffentlichte APIs). Dies kann ein besonders kostspieliges Problem sein, wenn sie gedruckt wird (auf Papier).


+1 für die Verwendung interner Codenamen - auch eine Art Entkopplung. Hey, es hat bei Mozilla funktioniert :-).
sleske

0

Ich sage, beheben Sie es auf jeden Fall, wenn der Code für eine beliebige Zeitspanne beibehalten werden soll. Sie werden wahrscheinlich in Zukunft Verwirrung und Zeit sparen.


0

Ich stelle fest, dass die "Marketing" -Entitäten häufig nicht genau den internen Entitäten entsprechen. In solchen Fällen ist es sinnvoller, eine Entität auf einer anderen Abstraktionsebene einzuführen, wodurch die Terminologieunterschiede zu einem strittigen Punkt werden.

Zum Beispiel haben wir ein Modell, das eine Hierarchie darstellt. Jeder Ebene in der Hierarchie ist ein Begriff zugeordnet, der darauf basiert, wie die Hierarchie zum Modellieren realer Beziehungen verwendet wird. Intern besteht jedoch kein Unterschied im Verhalten von einer Ebene der Hierarchie zur nächsten. Die Terminologie ist im Wesentlichen nur ein Name für diese Ebene in der Hierarchie. Für einen bestimmten Knoten in der Struktur beschreibt der Name einfach, was der Knoten ist. es schreibt kein bestimmtes Verhalten vor.

Außerdem ist der Baum mehrfach verwurzelt, sodass es mehrere Knoten ohne übergeordnetes Element gibt. Auch wenn konzeptionell eine Wurzel existiert (sie würde im Wesentlichen das Universum darstellen) und wenn sie in das Modell aufgenommen würde, würden viele Operationen viel einfacher, es gibt keinen "Marketingbegriff" dafür.

Natürlich verwenden verschiedene Komponenten in unserem System unterschiedliche Begriffe. Sie wurden zu unterschiedlichen Zeiten von verschiedenen Teams entwickelt, und wir haben nicht die Kontrolle über alle. Tatsächlich hat irgendwann jemand eine Ebene in einer Komponente hinzugefügt oder entfernt, und so werden die anderen Ebenen relativ zueinander verschoben. Dieselben drei Ebenen werden in einer Komponente durch A, B und C dargestellt, in einer anderen durch B, C und D.

Wenn Sie in der Abstraktion einen Schritt weiter gehen und einfach alles als "Knoten" oder etwas ähnlich Allgemeines modellieren, ist es viel einfacher, mit solchen Modellen zu argumentieren. Jeder Knoten weiß, was sein "Marketingbegriff" ist, und der Typ, der einen bestimmten Marketingbegriff darstellt, kann wissen, was dieser Begriff in jedem Kontext bedeutet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.