Czy pisanie zbędnego kodu jest złą praktyką?


Najlepsza odpowiedź

Tak, będziesz pisać te same rodzaje i wyszukiwania oraz funkcje obsługi ciągów tysiące razy, z których każda będzie niewielka odmiana ostatniego razu.

Jest to tak prawdziwe, że filozofia oszczędzająca zdrowie psychiczne, która zaprzecza temu, powstała w środowisku akademickim o nazwie „Nie powtarzaj się”, która udaje, że istnieje sposób, aby nie pisać tego samego kodu na i dalej.

Tę głupią mantrę naprawdę trzeba wybić z ludzi.

Inteligentny projekt oznacza, że ​​nie trzeba za każdym razem zaczynać od zera, a inteligentne kodowanie oznacza, że ​​trzeba wiedzieć, kiedy coś napisać nowe i kiedy ponownie wykorzystać kod.

Ponowne wykorzystanie kodu jako środek oszczędzający czas i debugowanie ma swoje zalety, gdy jest dostępny. To rozwinęło się w użyteczne narzędzia, takie jak typy ogólne i szablony oraz koncepcja dziedziczenia i uniwersalne interfejsy API, dzięki czemu sortowanie i wyszukiwanie staje się ogólne, zamiast konieczności pisania nowej funkcji wyszukiwania dla każdego typu tablicy lub listy.

Kopiowanie tekstu kodu jest uważane za najgorszy błąd, ponieważ kopiuje błędy i nadużywa kodu i jest przede wszystkim uważane za zbędne.

W tym przypadku dziedziczenie sprawdza się jako strategia redukcji kodu. Podklasy nie muszą być kosztownym przepisywaniem ich klas bazowych, jeśli większość funkcji wspólnych dla wszystkich podklas jest umieszczona w klasie bazowej. Często podklasa może wywołać funkcję klasy bazowej, a następnie sama wykonać kilka zmian, zamiast ponownie implementować całą funkcję. O tym właśnie mówią.

Ale „Dont Repeat Yourself” zyskało status kultowy na takich forach jako idealny sposób na kodowanie i projektowanie, a to po prostu nieprawda lub praktyczny lub część dowolnego większego zbioru kodu ze świata rzeczywistego.

Nadprojektowanie jest przeznaczone dla programistów języków, teoretyków i twórców frameworków. Praktyczni programiści po prostu piszą kod, który działa, a jeśli twój program ma dwie klasy, które implementują wyszukiwanie binarne, to co z tego. Czy naprawdę potrzebujesz trzeciej klasy z podklasami do obsługi wyszukiwań binarnych dla pozostałych dwóch klas danych? Być może, ale chodzi o skalowanie w górę wielkości klas danych z potrzebą wyszukiwania binarnego, wtedy posiadanie klasy, która robi to poprawnie, staje się prawdziwym oszczędzaniem czasu i błędów, którą można podzielić na podklasy w celu obsługi potrzeb klas danych. Widzisz?

Programowanie na dużą skalę wymaga znacznie więcej planowania i analizy podziału pracy niż programowanie małych zadań i narzędzi. Więc tak, jeśli masz projekt z ponad 1000 wierszy kodu, przejrzyj projekt i znajdź nadmiarowe algorytmy i funkcje oraz zdecyduj, czy możesz zebrać je w jedną funkcjonalną klasę narzędziową czy dwie i udostępnić kod dla wszystkich obiektów danych. Ale nie czyńcie z tego religijnej pogoni za ostateczną eliminacją zbędnych. I nie wierz tym, którzy to robią.

Odpowiedz

Jeśli jest to najbardziej wydajna opcja, nie jest to zła praktyka. Robienie czegokolwiek , które ma prostsze, bardziej eleganckie rozwiązanie, które jest łatwo dostępne, to jest zła praktyka .

W tym przypadku gigantyczny przełącznik można często zastąpić interfejsem lub pozwolić klasie na przejęcie własnej odpowiedzialności itp.

Na przykład, jeśli masz coś takiego :

To będzie działać. Kod będzie niezawodny, o ile wartości będą tylko dodawane, a nie edytowane, a w rzeczywistości jest nawet całkiem wydajny, ponieważ porównania bitów zajmują praktycznie zero czasu. Ale to wymknie się spod kontroli i będzie trudne w nawigacji, a Ty już i tak musisz zdefiniować te klasy samochodów.

Zamiast tego zacznijmy z czymś takim:

Ponownie, prawdopodobnie i tak mieliśmy to, tylko bez metody numberOfCylinders, więc teraz nasza pierwsza wygląda następująco:

Teraz wyobraź sobie, że jesteśmy krajowym sklepem z częściami samochodowymi i mamy dosłownie tysiące samochodów różnych marek, modeli, wykończeń itp. Że gdyby / inaczej stałoby się ogromnym potworem, niemożliwym do odczytania, niezwykle trudnym do bezpiecznego dodania lub usunięcia itp.

Więc znowu , to nie zawsze jest złą praktyką, a czasami będziemy potrzebować dużego przełącznika lub czegoś podobnego, ale zwykle jest łatwiejszy sposób na ukrycie się w tym miejscu.

EDYTUJ: Jest wiele komentarzy na temat posiadania n bardzo duża liczba kombinacji samochodów (potencjalnie miliony w historii) i klasy implementujące samochód zawodzą tutaj. Oczywiście w pewnym momencie klasy nie będą działać i będziesz przechowywać płaskie pliki w bazie danych i używać akcesorium.

Moja odpowiedź miała pokazać pułapkę używania bardzo długiego instrukcje warunkowe, a nie rzeczywista próba zbudowania architektury sklepu z częściami samochodowymi.Jeśli pracujesz w dużym sklepie samochodowym, nie traktuj mojej prostej odpowiedzi jako podstawy swojej architektury oprogramowania 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *