Długie metody są ogólnie uważane za złe, jednak w moim kodzie mam kilka trudnych do zrozumienia długich metod (ponad 50 wierszy). Mam problem z ułatwieniem odczytu tych metod, ponieważ pojedyncza instrukcja ma już ponad 50 wierszy, a ta trudna do odczytania pojedyncza instrukcja polega na zbudowaniu zapytania do bazy danych przy użyciu ORM w celu wykonania określonego zadania, w którym wykonano zadanie wyraźnie wskazane w nazwie metody. Powód, dla którego instrukcja jest tak długa, ponieważ łączy się w wielu kolumnach, stosuje wiele obszarów i wybiera wiele różnych kolumn, aby utworzyć wymagany udokumentowany format wyjściowy.
Czy taki trudny do odczytania kod jest uważany za zły kod? Podobnie, jeśli piszę kod skomplikowanego algorytmu, w wyniku którego kod jest trudny do odczytania i jest zawinięty w jasno nazwaną metodę, czy kod ten jest zły?
źródło
Odpowiedzi:
Napisałeś
więc zdecydowanie zgadzasz się, że jest to kod trudny do odczytania , a jeśli jest trudny do odczytania, jest trudny do utrzymania i ewolucji - więc myślę, że według własnego uznania uważasz kod za „zły”. Czasami jednak nie jest oczywiste, jak poprawić coś takiego jak 50-wierszowa instrukcja SQL. Łatwe refaktoryzacje metodą „wyodrębnij” nie działają i prawdopodobnie nie masz pojęcia, od czego zacząć od uczynienia kodu bardziej czytelnym. W takich przypadkach nadal możesz wypróbować jedną lub wszystkie z poniższych opcji
pokaż kod komuś, kto ma większe doświadczenie w czyszczeniu kodu niż Ty. Jeśli nie masz kogoś w swojej organizacji, możesz zapytać, spróbuj codereview.stackexchange
spróbuj wyszukać w Google konkretny problem. Na przykład dobrym pomysłem może być na przykład „czyszczenie długiej instrukcji SQL”. Zdziwisz się, ile artykułów znajdziesz na ten temat, a nawet jeśli nie możesz znaleźć przepisu na swoją sprawę, możesz uzyskać nowe pomysły
zamiast pytać o uzasadnienie rzeczy, których nie możesz zrobić, skoncentruj się na rzeczach, które możesz zrobić, aby oczyścić kod przynajmniej trochę, takich jak dodawanie odpowiednich podziałów wierszy, właściwe wcięcia, dodawanie komentarzy wyjaśniających, poprawianie niektórych zmiennych imię. Nie jest mało prawdopodobne, że podczas tego procesu, zmuszając się do ponownego przeczytania szczegółów kodu, znajdziesz sposób na przekształcenie kodu na mniejsze jednostki
ćwiczyć, ćwiczyć, ćwiczyć. „Czystego kodowania” nie uczy się w ciągu jednego dnia, staje się łatwiejsze z większym doświadczeniem. Być może dzisiaj nie znajdziesz rozwiązania swojego problemu, ale kiedy wrócisz do kodu za kilka miesięcy, będzie on wyglądał inaczej.
źródło
Trudny do odczytania nie jest zły - niepotrzebnie trudny do odczytania jest zły.
Niektóre rzeczy są po prostu trudne. W takim przypadku musisz całkowicie zrozumieć problem, napisać kod i skomentować go tak dobrze, jak to możliwe, aby następny programista miał szansę.
Ale niektóre rzeczy są trudne tylko dlatego, że je utrudniłeś. Jeśli problem można uprościć i uprościć, uprość go. Jeśli jest to trudne do zrozumienia, ale można je rozsądnie podzielić na podproblemy, podziel je na podproblemy, aby uprościć.
źródło
ORM, aby utworzyć raport? Poważnie? Naucz się trochę SQL, stary. Języki proceduralne są straszne w tego rodzaju sprawach.
SQL jest językiem znacznie lepiej zaprojektowanym do obsługi skomplikowanych połączeń i selekcji. I nawet jeśli nie możesz sprawić, by SQL wyglądał pięknie, dostępne są wszelkiego rodzaju narzędzia do wizualizacji, w których możesz przeciągać i upuszczać obiekty bazy danych na diagramie, a SQL zostanie dla Ciebie wygenerowany. Nie wspominając o tym, że będziesz mógł dostroić i zoptymalizować zapytanie, przejrzeć jego plan zapytań, poprosić platformę o zasugerowanie dodatkowych opcji indeksowania itp. Jest to po prostu o wiele bardziej elastyczne.
Jestem pewien, że niektórzy ludzie tutaj się ze mną nie zgodzą, ale ORM nie nadaje się do skomplikowanych celów sprawozdawczych. Jeśli to w ogóle możliwe, rozważę odejście od tego i przejście na język zapytań strukturalnych .
źródło
Ogólnie trudny do odczytania kod jest złym pomysłem w dowolnym miejscu - nawet jeśli jesteś jedynym opiekunem - miałem kilka razy wracałem do jakiegoś kodu lata lub nawet tygodnie później i nie mogłem się skupić.
Jeśli musisz dużo zrobić w jednym zapytaniu, spróbuj podzielić go na wiersze z osadzonymi komentarzami:
Staje się:
źródło
Oprócz doskonałej odpowiedzi @ DocBrown, myślę, że warto zauważyć, że nikt nie pisze przez cały czas „dobrego” kodu. Kodowanie powoduje kompromisy i często lepiej jest zaakceptować fakt, że napisałeś coś nieco mniej czystego, niż chcesz, i powrócić do tego później. Refaktoryzacja to proces ulepszania kodu w miarę upływu czasu - i z mojego doświadczenia wynika, że to stanowi dobrą bazę kodu, a nie „poprawienie go za pierwszym razem”.
I oceniasz kod na poziomie aplikacji, a nie na poziomie poszczególnych metod / linii kodu. Więc jeśli masz złożoną metodę, ale jest ona wyraźnie nazwana, nie sądzę, że masz „zły” kod, o ile metoda jest spójna.
Nazewnictwo jest największą bronią, którą posiadasz, aby kod był zrozumiały - nadaj swojej metodzie nazwę, która pozwala czytającym kod na pomijanie ciała, jeśli zajdzie taka potrzeba. Nazwij swoje zmienne itp. W taki sposób, aby czytelnicy mogli zobaczyć, co reprezentują, bez konieczności czytania instrukcji przypisania.
Następną rzeczą jest upewnienie się, że twoja metoda naprawdę robi tylko jedną rzecz - efekty uboczne sprawiają, że kod jest trudny do zrozumienia. Jeśli więc metoda zwraca dane dla formatu wyjściowego, nie powinna również aktualizować stanu bazy danych do „wydrukowanego” ani żadnego innego.
Warstwowanie / komponowanie to kolejna rzecz, którą możesz zrobić - jeśli masz kilka złożonych metod, które generują wyniki ORM, połącz je razem, aby czytelnicy twojego kodu mogli założyć, że wszystkie zachowują się w ten sam sposób, nie mają skutków ubocznych itp.
źródło