Side Effects Rule PSR-1 konflikty |
Side Effects Rule PSR-1 konflikty |
29.07.2016, 10:18:19
Post
#1
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) |
Przedstawiam 2 kody, które są niezgodne z Side Effects Rule.
KOD1
KOD2
Mam nadzieję, że mniej więcej widać, co programista chciał osiągnąć... KOD1 Wczytuje autoloader i od razu z niego korzysta. KOD2 Korzysta z klasy Mailer oraz spisu adresów zawartego w oddzielnym pliku. Potem wysyła mejle i sporządza raport z wysyłania. I teraz moje pytanie. Jak zbudować te aplikacje, żeby były zgodne z PSR-1 Side Effects Rule. Czy da się zachowując odrębność plików, czyli bez umieszczenia wszystkiego w jednym pliku. Czy może programiści jednak nie przejmują się tą zasadą? Z góry dziękuję Ten post edytował trzczy 29.07.2016, 10:19:37 |
|
|
29.07.2016, 12:36:50
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 268 Pomógł: 254 Dołączył: 11.06.2009 Skąd: Świętochłowice Ostrzeżenie: (0%) |
Ta zasada nie pozwala mieszać deklarowania (klas, funkcji, ustawień etc.) z wykonywaniem kodu.
Jeśli masz w pliku deklarację klasy, to nie powinno być tam żadnego include. Jeśli natomiast w danym pliku coś robisz, to… nie da się przecież nie zrobić include. Zresztą to jest w pierwszym zdaniu tej zasady: Cytat A file SHOULD declare new symbols (classes, functions, constants, etc.) and cause no other side effects, or it SHOULD execute logic with side effects, but SHOULD NOT do both. Kod wykonujący konkretne działania może mieć skutki uboczne. Kod deklarujący klasy, funkcje itd. – nie. -------------------- ★Mój blog || Okiem krytyka★
|
|
|
29.07.2016, 16:59:57
Post
#3
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) |
W pytaniu chodzi o to, jak przerobić podane aplikacje, aby były zgodne z tą zasadą.
|
|
|
29.07.2016, 17:21:21
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 268 Pomógł: 254 Dołączył: 11.06.2009 Skąd: Świętochłowice Ostrzeżenie: (0%) |
A w moim poście masz odpowiedź…
-------------------- ★Mój blog || Okiem krytyka★
|
|
|
29.07.2016, 17:42:11
Post
#5
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) |
Nie żartuj. Pytam jak uniknąć stosowania deklaracji i includowania w 1 pliku, a Ty odpowiadasz, że przez uniknięcie stosowania deklaracji i includowania w 1 pliku. Chodzi mi o przepisanie podanego kodu na poprawny. I nie o to, jakie tam zastosować zasady PSR, tylko jak powinien kod wyglądać konkretnie.
Jeśli to prośba o gotowca, to proszę o podanie zarysu struktury aplikacji w sensie użytych klas i plików. |
|
|
29.07.2016, 17:48:03
Post
#6
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 22 Dołączył: 10.02.2015 Ostrzeżenie: (0%) |
Nie wiem na ile moja odpowiedź jest zgodna ze standardami, ale skoro w pliku "adresses_for_mailing.php" trzymasz jedynie adresy mailowe, może wartoby przenieść to do jakiejś klasy, która byłaby za to odpowiedzialna.
-------------------- |
|
|
29.07.2016, 18:12:10
Post
#7
|
|
Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%) |
Nie wiem na ile moja odpowiedź jest zgodna ze standardami, ale skoro w pliku "adresses_for_mailing.php" trzymasz jedynie adresy mailowe, może wartoby przenieść to do jakiejś klasy, która byłaby za to odpowiedzialna.
+ Namespace i konkret autoloader -------------------- Cytat There is a Bundle for that Lukas Kahwe Smith - October 31th, 2014 |
|
|
29.07.2016, 18:27:17
Post
#8
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) |
Klasa trzymająca dane to jednak chyba rozwiązanie wątpliwe, bo dane się mogą zmieniać, a zmiana danych nie powinna wymuszać zmiany klasy. Naturalnym wydaje się trzymanie danych gdzieś na zewnątrz, w jakimś xml albo csv, czy bazie danych. I teraz, pobieranie tych danych to zawsze będzie zjawiskiem Side Effect.
|
|
|
29.07.2016, 18:27:42
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 268 Pomógł: 254 Dołączył: 11.06.2009 Skąd: Świętochłowice Ostrzeżenie: (0%) |
@trzczy, problem w tym, że przedstawiony przez Ciebie kod jest poprawny…
include nie może być tam, gdzie deklarujesz klasy lub masz config aplikacji. W reszcie to nieistotne. -------------------- ★Mój blog || Okiem krytyka★
|
|
|
29.07.2016, 19:04:35
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 366 Pomógł: 1115 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Dołączenie pliku np tablicy konfiguracyjnej nie ma zazwyczaj żadnych efektów ubocznych.. Problem się pojawi jak ten sam plik zacznie wykonywać ddatkowo logikę np zmieni ustawienia aplikacji przez redeklaracje ścieżek.
-------------------- |
|
|
29.07.2016, 19:22:00
Post
#11
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) |
Przypisywanie zmiennej i tworzenie obiektu może sąsiadować z Side Effects. Ok. Z kolei proste inkludowanie danych nie jest Side Effects.
Ten post edytował trzczy 29.07.2016, 19:22:40 |
|
|
Wersja Lo-Fi | Aktualny czas: 5.06.2024 - 22:45 |