Dependency Injection na prostym przykładzie w PHP

Cześć! Dzisiaj na tapecie wzór projektowy wstrzykiwanie zależności. Co znajdziesz w tym wpisie:

Czym jest wstrzykiwanie zależności?

Jest to przekazywanie potrzebnej zależności poprzez argument zamiast tworzenia jej. Zanim poznałem DI, miałem zwyczaj pisać kod który w locie tworzył sobie potrzebne zależności. Przykład z życia wzięty:

Jak byś przetestował tą klasę? Ja widzę tylko jedną opcję:

  1. Tworzysz nową instancję,
  2. Za jej pomocą wgrywasz plik na S3,
  3. Weryfikujesz czy plik został wgrany na S3.

Skomplikowane prawda? Wynika to z faktu że klasa jest silnie (wręcz nierozerwalnie) powiązana z klasą klienta S3. Nie możemy przekazać imitacji klienta. To powoduje następujące konsekwencje:

  • nie da się napisać testu jednostkowego – test jest integracyjny,
  • testowanie wymaga połączenia sieciowego oraz poprawnej konfiguracji S3,
  • takie test będzie trwał dużo dłużej niż prosty test jednostkowy.

Jak rozwiązać ten problem? Użyj wstrzykiwania zależności!

Jak je zaimplementować?

Tej klasie do działania potrzebna jest instancja klienta S3. Przekażę ją przez argument konstruktora:

Alternatywną opcją jest użycie settera. Dzięki temu podejściu możemy w łatwy sposób przekazać właściwą instancję klienta S3. Prawdziwą w środowisku produkcyjny a w środowisku testowym imitację.

Implementacja testu w PHPSpec:

Cały test jest bardzo prosty do napisania, trwa 93ms 🙂

Jakie ma plusy i minusy?

Zacznę od plusów:

  • ułatwia a czasem wręcz umożliwia pisanie testów jednostkowych,
  • rozluźnia powiązanie między klasami, w przypadku użycia interfejsów czy klas abstrakcyjnych powiązanie jest jeszcze słabsze,
  • wyprowadzania logikę tworzącą obiekty w inne miejsca

Minusy:

  • gdzieś te obiekty trzeba stworzyć, w prostych projektach tworzę klasy fabryki, w większych zdecydowanie polecam użycie kontenera wstrzykiwania zależności,
  • kod może się wydawać trudniejszy do zrozumienia.

Linki

Wyszukiwanie duplikatów w bazie danych MySQL

Czołem!

Miałem dzisiaj krótką batalię z jedną tabelką w bazie. Tak wygląda jej struktura:

Posiada ona klucz unikalny na dwa pola, page_id oraz name. Akurat pisaliśmy migrację która robiła TRIM() na polu name. Jednak migracja się wykładała ponieważ były wpisy duplikaty z białymi znakami. Problem który musiałem rozwiązać to sposób w jaki wyszukać te duplikaty i je poprawić.

Czytaj dalej Wyszukiwanie duplikatów w bazie danych MySQL

Jak sprawdzić które pliki się zmieniły względem innego branch?

Szybki post!

Jeśli chcesz sprawdzić które pliki zostały zmienione w branchu względem innego to wystarczy na danym branch wywołać komendę:

Wyświetli nam listę zmienionych plików względem master 🙂

Przydatne gdy chcemy np. zmienione pliki odpalić w ESLint czy innym narzędziu.

Repozytorium ustawień w PhpStorm / WebStorm

Cześć

Miał być post w niedzielę, jest w poniedziałek! 🙂

Dzisiaj krótko. Mało kto wie o wspaniałej wtyczce do naszego IDE – Settings Repository. Pozwala nam na zapisywanie ustawień aktualnego projektu do zewnętrznego repozytorium (polecam Bitbucket). Dzięki temu mamy te same ustawienia w domu, w pracy, czy w każdym innym miejscu. Ustawienia się synchronizują w pełni automatycznie. Więc w nowym miejscu możesz się poczuć jak w domu.

Konfiguracja

Czytaj dalej Repozytorium ustawień w PhpStorm / WebStorm

Kahlan – PHP test framework – dla wolności, prawdy i sprawiedliwości

TDD

Czyli coś co chyba każdy z nas robi – a przynajmniej powinien! Kto słyszał o PHPUnit? Albo o PHPSpec? A może Codeception? To dobre i sprawdzone narzędzia które mają jednak swoje minusy. Dzisiaj chcę wam zaprezentować całkiem świeże narzędzie – Kahlan.

Co to kurcze jest?

Jest to kolejny framework do pisania testów. Czym się różni od poprzednich? Na pewno składnią. Czy znacie RSpec albo jasmine? Tutaj mamy bardzo podobną implementację dla PHP, a więc używamy describe-it. Jest to cholernie wygodne i łatwe do zrozumienia. Chcecie przykład*?

Czytaj dalej Kahlan – PHP test framework – dla wolności, prawdy i sprawiedliwości

Złe strony JavaScriptu – new oraz this

Cześć!

Słowem wstępu…

Obiecałem wam ostatnio, że dodam wpis w ciągu dwóch tygodni. Jednak pisząc ostatniego posta zapomniałem, że za chwilę mam ślub i podróż poślubną…

Ah ten czas szybko leci! Wydarzenia te wydłużyły proces produkcji tego artykułu. Za co z góry przepraszam!

Co dzisiaj?

Rozważymy dwa problematyczne elementy JavaScriptu. Operator new oraz słowo kluczowe this.

Brak operatora new

Konstruktor to zwykła funkcja. Co się stanie gdy pominiesz operator new?

Czytaj dalej Złe strony JavaScriptu – new oraz this