Czy należy zmienić wewnętrzne nazewnictwo (klasy, metody, tabele bazy danych itp.) Encji, jeśli zmieni się nazewnictwo marketingowe i interfejs użytkownika?

20

Mamy produkt o długim okresie życia od około 8 lat. Z czasem zmieniają się nazwy pojęć i encji. Czy powinniśmy włożyć wysiłek w zmianę nazwy wszystkich baz i tabel bazy danych i kolumn, aby pasowały do ​​tych nowych nazw?

Czy opublikowano badanie dotyczące tej lub kilku najlepszych praktyk?

Dzięki

znak
źródło

Odpowiedzi:

6

Niedopasowanie między nazwami wewnętrznymi i zewnętrznymi zdecydowanie pachnie. Jak podkreśla Rinzwind, homofony i synonimy pachną najgorzej.

Prawdziwe pytanie, na które musisz odpowiedzieć, brzmi: jaki jest koszt / korzyść kompromisu przy wprowadzaniu zmiany?

Koszt braku zmiany jest bardziej stromy dla nowych członków zespołu i zwiększa prawdopodobieństwo przyszłych błędów. Kosztem zmiany jest oczywisty czas poświęcony, nowa krzywa uczenia się dla dawnych czasów w projekcie i możliwość nowych błędów.

Jeśli spodziewasz się stosunkowo dużej liczby nowych członków zespołu, bardziej prawdopodobne jest dokonanie zmiany. Jeśli nie spodziewasz się żadnych obrotów, obecny zespół zwykle nie jest zdezorientowany, a zespół jest zadowolony ze status quo, wtedy zmiana nazwy rzeczy nie ma sensu.

jimreed
źródło
Sugerowałbym, że z pewnością obecni członkowie zespołu znają nazwy „sprzedawane”, a zatem zmiana nie wpłynie na nich. Search & Replace sprawia, że ​​zmiany te są prawie bezbolesne.
Matthieu M.,
@Matthieu Search & Replace lub narzędzia refaktoryzacyjne sprawiają, że początkowa zmiana jest stosunkowo łatwa, ale stare nawyki umierają ciężko, a członkowie zespołu prawdopodobnie nadal będą myśleć przez pewien czas o starych nazwach wewnętrznych.
jimreed,
Co z tabelami baz danych. Łatwo jest zmienić ich nazwę, ale musisz wdrożyć proces aktualizacji, który może obejmować klucze obce, a co nie
Mark
2

Jeśli oczekuje się, że kod będzie istniał przez długi czas i będą nad nim pracowali nowi programiści, dokonałbym zmian.

Może być bardzo mylące i czasochłonne, aby nowy programista wszedł do projektu i stwierdził, że nazwy podmiotów wprowadzają w błąd.

Istnieje również prawidłowy argument ... Jeśli nie jest zepsuty, nie naprawiaj go.

Steve Wellens
źródło
2

Jeśli chodzi o twoje drugie pytanie, nie znam żadnych opublikowanych badań ani najlepszych praktyk. Jeśli chodzi o pierwsze pytanie, mogę przedstawić pewne spostrzeżenia z własnego doświadczenia z podobnym długowiecznym produktem, w którym czasami nazwy „wewnętrzne” i „zewnętrzne” są czasami różne.

Nazwy, które naprawdę chciałbym naprawić, to „homofony”, w których jedno imię jest używane zarówno wewnętrznie, jak i zewnętrznie do różnych celów . Może to być naprawdę mylące, szczególnie jeśli dwie rzeczy nie są całkowicie różne (takie, że kontekst pomaga jednoznacznie określić). Jednym (abstrakcyjnym) przykładem tego w moim osobistym doświadczeniu jest to, że wewnętrznie masz coś takiego jak Foozbiór wielokrotności FooEntity; zewnętrznie tylko ten ostatni jest widoczny i nazywa się „Foo”. Zajęło mi trochę czasu, aby dowiedzieć się, że kiedy instrukcja obsługi mówiła o wielu „Foo”, w rzeczywistości oznaczało to wiele FooEntity(w jednym Foo), jeśli nadal ma to dla ciebie sens.

Po drugie, chciałbym naprawić wszelkie „synonimy”, w których niektóre nazwy zewnętrzne zostały użyte wewnętrznie. Podobnie jak w nazwach zmiennych, częściach nazw metod / funkcji i tak dalej. Dzieje się tak często, gdy programiści implementują coś bezpośrednio z opisu wymagań klienta i zapominają o „tłumaczeniu” nazw. Kiedy to nastąpi, „niewłaściwa” nazwa również się rozprzestrzenia, ponieważ inni programiści kopiują / wklejają część tego kodu, aby na przykład użyć go jako szablonu dla nowego kodu. Te synonimy nie są tak mylące, ale mogą być denerwujące, ponieważ jeśli szukasz kodu w poszukiwaniu jakichkolwiek odniesień, Barmożesz pamiętać, że niektóre części mogą nazywać goQux, więc musisz wyszukać dwa razy. (Może być gorzej w językach dynamicznie typowanych niż w językach statycznych, ponieważ trzeba wyszukiwać części nazw zmiennych / funkcji / ... zamiast nazwy ich typu.) Co do odwrotnego przypadku „synonimów” ”, W którym nazwa wewnętrzna została użyta zewnętrznie: zwykle nie zdarza się to tak często, ponieważ pracownicy obsługi klienta i tak dalej są zwykle mniej świadomi wewnętrznych nazw, chociaż zakładam, że jest to mylące dla klientów, kiedy to się dzieje.

Jeśli możesz uniknąć lub naprawić przynajmniej dwie powyższe sytuacje, nie jestem pewien, czy powinieneś posunąć się tak daleko, aby wszystkie wewnętrzne nazwy były takie same jak zewnętrzne. Prawdopodobnie istnieje dobry powód, dla którego nazwy wewnętrzne nie uległy zmianie, gdy nazwa zewnętrzna została w pierwszej kolejności inna niż nazwa wewnętrzna. Z mojego osobistego doświadczenia wynika, że ​​dobrym powodem jest obsługa starszych wersji produktu; może być trudno połączyć poprawkę błędu z wersji czyszczenia przed nazwami do najnowszej wersji, jeśli trzeba zmienić dużo kodu.

Rinzwind
źródło
2

To dość powszechny problem. Wiele projektów, nad którymi pracowałem, używa nazw kodowych zamiast nazw produktów (które w tym momencie mogły nie zostać ustalone) i używają zupełnie innej terminologii w kodzie niż to, co wyświetla się użytkownikowi. Prawdopodobnie pozostawiłbym rzeczy takimi, jakie są, chyba że przechodzisz masową zmianę przeznaczenia kodu lub jeśli występuje coś konkretnego powodującego problemy. Nie ma sensu denerwować wózka z jabłkami. Kto powiedział, że za 5 lat nie będzie więcej zmian? A potem będziesz musiał ponownie przejść przez zmianę nazwy. I nie zapominaj, że wpływa to również na każdą osobną dokumentację kodu, którą możesz mieć (opublikowane API), co może być szczególnie kosztownym problemem, jeśli zostanie wydrukowana (wersja papierowa).

Grandmaster B.
źródło
+1 za używanie wewnętrznych nazw kodowych - także rodzaj oddzielenia. Hej, to zadziałało dla Mozilli :-).
sleske,
0

Mówię: napraw to w każdym przypadku, gdy kod ma być utrzymywany przez dowolny okres czasu. Prawdopodobnie zaoszczędzisz zamieszanie i czas w przyszłości.

NexusRex
źródło
0

Uważam, że często podmioty „marketingowe” nie odpowiadają dokładnie podmiotom wewnętrznym. W takich przypadkach bardziej sensowne jest wprowadzenie bytu na innym poziomie abstrakcji, co sprawia, że ​​różnice terminologiczne są kwestią sporną.

Na przykład mamy model reprezentujący hierarchię. Każdy poziom w hierarchii jest powiązany z terminem opartym na tym, w jaki sposób hierarchia służy do modelowania relacji w świecie rzeczywistym, ale wewnętrznie nie ma różnicy w zachowaniu między poziomami hierarchii. Terminologia jest w zasadzie tylko nazwą tego poziomu w hierarchii, więc dla określonego węzła w drzewie nazwa po prostu opisuje, czym jest ten węzeł; nie nakazuje żadnego konkretnego zachowania.

Drzewo jest również zrootowane, więc istnieje kilka węzłów bez rodzica. Chociaż koncepcyjnie istnieje korzeń (zasadniczo reprezentowałby wszechświat), a włączenie go do modelu znacznie uprościłoby wiele operacji, nie ma dla niego „terminu marketingowego”.

Oczywiście różne elementy w naszym systemie używają innej terminologii. Zostały one opracowane w różnych momentach przez różne zespoły i nie mamy nad nimi kontroli. Właściwie w pewnym momencie ktoś dodał lub usunął poziom w jednym elemencie, a więc pozostałe poziomy są przesunięte względem siebie. Te same trzy poziomy są reprezentowane przez A, B i C w jednym składniku, ale jako B, C i D w innym.

Postęp w abstrakcji i po prostu modelowanie wszystkiego jako „węzła” lub czegoś równie generycznego sprawia, że ​​tego rodzaju modele są znacznie łatwiejsze do uzasadnienia. Każdy węzeł wie, co to jest „termin marketingowy”, a typ reprezentujący konkretny termin marketingowy może wiedzieć, co oznacza ten termin w każdym kontekście.

Adam Jaskiewicz
źródło