Może trochę zuchwale, ale ponieważ nigdzie nie mogę znaleźć tej odpowiedzi za pośrednictwem Google, więc aby upewnić się, że Inżynieria oprogramowania ma odpowiedź:
Co to jest pomocnik?
Widziałem tę nazwę wszędzie używaną (nazwy modułów, nazwy klas, nazwy metod), jak gdyby semantyka była głęboka i znacząca, ale w kontekście informatyki (chociaż nie mam dyplomu), „ nigdzie nie widziałem opisu ani definicji!
Czy to wzór? Czy to jest algorytm? Kiedyś pracowałem nad programem, w którym moduł i klasa były nazywane czymś coś pomocnikiem (gdzie coś też było dość ogólne) i natychmiast zmieniłem nazwę na coś, co miało dla mnie sens, ale mam wrażenie, że czegoś mi brakuje!
design-patterns
algorithms
semantics
Aaron Hall
źródło
źródło
Odpowiedzi:
Klasa Helper jest mniej znanym zapachem kodu, w którym programista zidentyfikował różne, często używane operacje i próbował umożliwić ich ponowne użycie, łącząc je w nienaturalne grupowanie. Kolejni programiści przystąpili do projektu i nie zdawali sobie sprawy z istnienia klasy pomocniczej, w związku z czym przepisali te same wspólne operacje, a nawet stworzyli więcej klas pomocniczych.
Ale poważnie, głównym problemem z klasami Pomocników jest to, że zwykle są to operacje, które działają na konkretnej klasie, co oczywiście oznacza w kategoriach OO, że cierpią na ostry przypadek Zazdrości o cechy . Brak pakietu zachowania z danymi, na których działa, powoduje, że programiści tak często (z mojego doświadczenia) nie potrafią go znaleźć.
Ponadto, jak już zidentyfikowałeś SomethingSomethingHelper, to tak naprawdę okropne imię. Jest nieopisowy i nie daje rzeczywistego pojęcia, jakie operacje wykonuje klasa (pomaga?), Co oznacza również, że nie jest oczywiste, gdy dodaje się nowe zachowania, niezależnie od tego, czy należą one do klasy Helper, czy nie. Rozbijałem takie klasy zgodnie z pokrewnymi zachowaniami, które logicznie grupują się, a następnie zmieniałem nazwy nowych klas, aby odzwierciedlić to, co robi.
źródło
SomethingSomethingHelper
to nie jest prawdziwa nazwa klasy. To, czy jest to zapach kodu, czy nie, zależy od tego, jak specyficzna jest klasa pomocnicza, ponieważ klasy pomocniczeMath
w ogóle nie są zapachem kodu.SomethingSomethingHelper
. Do diabła, patrzę teraz na klasę nazwanąHelperMethods
w<company>.Helpers
przestrzeni nazw. Dla mnieHelper
klasa jest w tym samym segmencie co*Manager
.Helper
i myślę, że ma to na celu ujednoznacznienie go z klasą .NET Framework o tej samej nazwie. Uznałbym za*Helper
akceptowalne, gdyby*
było coś znaczącego.HelperMethods
jest po prostu porażką wyobraźni; powinny istnieć przynajmniej określone wiadra pojęciowe.do..while
pętli w Pythonie, której język nie obsługuje (zobacz drugi przykład tutaj ). Inną byłaby struktura if / elif /.../ else, ale trzeba powtórzyć przypadek na górze i na dole. Jeśli to możliwe, powinny one być lokalne dla tej funkcji i ogólnie nie powinny być nazywane „pomocnikami”.Pomocnik jest nieszkodliwą dodatkową klasą lub metodą, o ile uzupełnia komponent zewnętrzny. Jeśli robi coś przeciwnego, oznacza to zły projekt, ponieważ kod został wykluczony z jego uprawnień, jeśli w ogóle istnieją jakiekolwiek uprawnienia.
Oto przykład nieszkodliwego pomocnika, używam metody o nazwie
FindRep
liczącej zera wiodące.Metoda pomocnicza jest bardzo prosta, ale bardzo niewygodna w kopiowaniu i wklejaniu, a środowisko nie zapewnia żadnego rozwiązania.
A oto przykład złego pomocnika:
źródło
Moja firma używała metodologii klasy Base / Helper, w której każdy obiekt miałby dwie klasy. Miałbyś klasę Person, która zawierała wszystkie właściwości i definicje klasy, oraz klasę PersonHelper, która zawierała wszystkie metody, instrukcje SQL i logikę, które manipulowały klasą Person. Działa to dla nas dobrze, ponieważ wszystkie nasze aplikacje używają instrukcji SQL do manipulowania danymi i bardzo łatwo było nam znaleźć i zmodyfikować instrukcje SQL w razie potrzeby.
Od tego czasu przeszliśmy i teraz umieściliśmy wszystko w klasie Person / Base. Przestaliśmy używać konwencji nazewnictwa Helper, ponieważ chcieliśmy mieć mniej plików w naszych projektach. Poza tym długość niektórych nazw klas wymykała się spod kontroli. lol.
Nie jest to świetny przykład, ale masz pomysł.
Nie twierdzę, że stosowanie konwencji nazewnictwa pomocników jest idealnym rozwiązaniem, ale działało dla nas przez kilka lat.
źródło