Inżynieria oprogramowania

PHP Ewolucje – standardy i niestandardy … jeszcze


PHP Ewolucje – standardy i niestandardy … jeszcze

Z każdym dniem w wolnym czasie udaje mi się implementować nowe klasy funkcyjne w projekcie Phunc, otwarte repozytorium znajduje się na GitHub.

Typowe Myślenie

Dla mnie to pierwsze wdrożenie projektu w idei o której pisałem już wcześniej. Wówczas implementowałem pojedyncze rozwiązania testowew celach doświadczalnych. Im bardziej używam myślenia funkcyjnego opartego na typowaniu tym bardziej widzę jak ułatwiam sobie pracę i jak bardziej wieloużteczny kod produkuję.

Gdy pora na refaktoring, myślę o drzewie, które wyrosło nadwymiar i przysłania to co istotne.

Pora na rozsadzenie:

fotolia_122947272

Przebieg refaktoryzacji

  1. Pozbywam się gałęzi klas
  2. Zamieniam je na pojedyncze listki na nowym mniejszym drzewie projektu

Korzyści refaktoryzacji

  1. Modułowy kod staje się bardziej jednoznaczny i czytelny
  2. Funkcyjna implementacja usuwa wiele atrybutów, efektem jest Single Responsibility
  3. Typowanie daje jednoznaczne określenie danej funkcjonalności, dając wieloużywalność i naturalnie efektem jest Łatwość stosowania Dependency Injection

Efekt uzyskuje się odpowiednio nazywając klasy, tutaj też warto otworzyć umysł, aby precyzyjnie a nie tylko rzeczownikowo nazywać, często po prostu definiuję zdanie:

  • new SaveFileToRemoteServer()
  • new DownloadFileFromUrl()
  • new ChangeFileName()
  • new AddNewLineInFile()
  • new AddErrorToLogs()

Czy długość przeszkadza jeśli korzyścią jest czytelność kodu?

Programowanie w PHP ma swoje wady, ale też jest wiele możliwości, minusem jest konieczność sprzątania kodu, który bywa długi i szeroki, ale … może to pora na zmianę?

np. zmianę monitora na wyższą rozdzielczość 2560×1440 ?

Czy strata czasu na zrozumienie krótkich i nieprecyzyjnych przez to nazw jest uzasadniona?

Ponadto precyzyjne określenie nazwy ułatwia użycie w innym przypadku.

Zasady

  1. Najmniejsza publiczna zmienna jest objektem reprezentowanym przez klasę funkcjyjną lub reprezentację danych.
  2. Prywatne zmienne reprezentowane w typach prostych istnieją tylko wewnątrz klasy na użytek wewnętrzny, na zewnątrz publicznie dostępne są methody klasy
  3. Zapisywaniem danych i zmianą ich wartośći zajmuje się konstruktor
  4. Odczyt danych z obiektu jest możliwy poprzez methody, bez możliwości zmiany wartości, tylko odczyt.
  5. Nazwa klasy funkcyjnej ściśle określa zadanie jakiemu ona służy,

Podsumowanie

Kod jest czytelny, to jedna z podstawowych korzyści, o innych będę jeszcze pisał.

Tom
Tagi: , , , , , , ,