Czysty kod- czy aby nie przesada? |
Czysty kod- czy aby nie przesada? |
9.10.2016, 10:54:30
Post
#1
|
|
Grupa: Zarejestrowani Postów: 602 Pomógł: 30 Dołączył: 1.08.2007 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
Witam, ostatnio jestem w trakcie lektury książki R.C Martin'a Czysty kod, i jest tam pełno kodu, który rozbijany jest na jedno dwu liniowe przykłady o dość specyficznych opisowych nazwach. Postanowiłem napisać kawałek kodu wg Jego schematu, akurat miałem refaktoryzować model słownika do pewnej aplikacji finansowej, gdzie kod jest fatalny, ale małymi krokami staram się to zmieniać i tak oto napisałem fragmęt:
Czy z tymi nazwami to nie przesada? Wzorowałem się na ksiązce czysty kod. Jak wy rozwiązujecie sprawy nazw lepiej dać:
czy może:
Jakie inne dobre praktyki Wy polecacie? Czy takie tworzenie metod to nie przesada? Ten post edytował daniel1302 9.10.2016, 10:57:27 |
|
|
9.10.2016, 13:35:30
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
nie:
if (isset($this->accountData[12]) && !empty($this->accountData[12])) { a poprostu if (!empty($this->accountData[12])) { Zas co do reszty twojego kodu to strasznie kola w oczy bledy w angielskim oraz nazwy funkcji,eg: nie: Is criterium exists a: Does criterium exist Analogicznie cala reszta Rowniez dlugosc nazw jest zdziebko zadluga Zamiast throwExceptionIfCriteriumIsNotExists daj poprostu checkIfCriteriumExists Ponadto generujesz wszystko na static a potem jedno nie jako static, ale i tak wywolujesz jak static Dodatkowo raz uzywasz stalych a raz nie Za duzo tez rzeczy trzymasz jako wartosci w klasie. W zasadzie wiekszosc (jak nie wszystkie) powinny lezec w tabelach slownikowych -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
9.10.2016, 17:41:07
Post
#3
|
|
Grupa: Zarejestrowani Postów: 602 Pomógł: 30 Dołączył: 1.08.2007 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
No tak, nie zastanowiłem się,
Co do tabel słownikowych tak była napisana aplikacja a jako, że jestem w trakcie refaktoryzacji kodu, chętnie przyjmę każdą poradę. Mam kolegę który jest przeciwnego zdania, żeby nie trzymać takich rzeczy które raczej bardzo rzadko się zmieniają w tabelach w BD, że jest to strata optymalizacji. Ten jeden brak statica to tez błąd, chciałem wysłać posta a musiałem wychodzić i to wszystko stąd, przerpaszam za takie olewnictwo A jak byś rozwiązał taki słownik, zrobił tabelę do każdego typu osobno i zrobił klasę abstrakcyjną lub interfejs, czy razem w jednej tabeli trzymał wszystko i jedną klasa to obsługiwał. Niektóre wartości w słowniku mają tylko nazwe niektore wiecej informacji. |
|
|
9.10.2016, 18:58:51
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
Jakby chciec zrobic to super poprawnie, to na kazda tabele slownikowa by sie przydala klasa - model.
Zas ja osobiscie na taka rzecz uzywam jednej klasy, ktora zwraca mi co trzeba na podstawie parametru bedacego nazwa slownika. Twoje tabele slownikowe powinny zawierac pola ID, NAME, DESC i zaspokoi to potrzeby w 99% Raz widze masz jeszcze tam wojewodztwa. To albo dodac kolejne pole do tej tabeli i po przecinku ID wojewodztw albo tabele laczaca. Zas co do optymalnosci na ktora skarzy sie kolega - no po to takie rzeczy trzyma sie w cache a nie pobiera za kazdym razem -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
10.10.2016, 08:32:04
Post
#5
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%) |
@nospor
Zgodzę się z tabelami słownikowymi, pod warunkiem nie trzymania tam AI, poza tym, imo i tak lepiej trzymać stałą w obiekcie, zdecydowanie lepiej jest zrobić warunek:
zamiast
Chociażby dlatego, że nie ważne w którym miejscu systemu odwołam się do const'a, to zawsze mam pewność co do jego wartości (zakładając zachowanie wartości const :: id z tabeli), dodatkowo, jeżeli z jakiegoś głupiego powodu chcę zmienić ten ID, to wystarczy zrobić to w miejscu, gdzie go definiuję. Ten post edytował kpt_lucek 10.10.2016, 08:35:18 -------------------- Cytat There is a Bundle for that Lukas Kahwe Smith - October 31th, 2014 |
|
|
10.10.2016, 08:34:51
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
A co więcej PHP ma http://php.net/manual/en/class.splenum.php
-------------------- |
|
|
10.10.2016, 09:41:37
Post
#7
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Co z tego skoro ma wmaganie (PECL spl_types >= 0.1.0)
|
|
|
10.10.2016, 10:22:47
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Ano nic Używam od dawna tego https://github.com/garoevans/php-enum
Jak jest natywnie to korzysta, jak nie to tworzy wrapper. -------------------- |
|
|
10.10.2016, 10:29:28
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
To ta klaska sluzy tylko i wylacznie do sprawdzania czy istnieja stale. Rety... czego to ludzie nie wymysla....
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
10.10.2016, 10:40:48
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Jak przechodzisz z Javy to właśnie enumeratorów brakuje. Lepsze to niż interface symylujący.
-------------------- |
|
|
10.10.2016, 10:47:34
Post
#11
|
|
Grupa: Moderatorzy Postów: 36 457 Pomógł: 6296 Dołączył: 27.12.2004 |
No tak... java... jedno slowo warte 1000 innych
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 20:21 |