Warstwa Abstrakcji - stanowi izolację pomiędzy kodem programisty a zewnętrznymi modułami, pozwala odseparować system od jego zależności przez co czyni go podatnym na zmiany i aktualizacje. Przywiązując system do innej usługi czynimy go słabym.

Wzorce projektowe w praktyce - rejestracja użytkownika

2015-09-24

Obecnie praktycznie każdy system posiada mniej lub bardziej rozbudowany mechanizm rejestracji kont użytkowników. Nie inaczej było też w przypadku, w którym jeden z programistów poprosił o pomoc na irc. Problem przedstawiał się następująco: programista tworzył mechanizm rejestracji użytkownika, dane kont przechowywał w bazie danych, do obsługi bazy postanowił skorzystać z Doctrine natomiast testy jednostkowe pisał przy użyciu PHPSpec.

Dobór narzędzi bardzo standardowy jak na obecne czasy i za razem bardzo trafiony, gdyż PHPSpec praktycznie od razu powiedział mu, że coś robi źle. Problem w tym, że on tego przekazu nie potrafił zrozumieć i myślał, że popełnił błąd w specyfikacji.

Po kilku zdaniach wstępu pokazał specyfikację usługi rejestrującej użytkownika, w zasadzie tylko jednego scenariusza tej specyfikacji, mianowicie "poprawna rejestracja nowego konta".

class RegistrationServiceSpec extends ObjectBehavior
{
    function it_registers_user(Registry $doctrine, EntityManager $entityManager, Form $form)
    {
        $doctrine->getEntityManager()->willReturn($entityManager);

        $form->getData()->willReturn(['username' => 'norzechowicz', 'password' => 'pass123']);

        $entityManager->persist(Argument::type('Custom\Entity\User'))->shouldBeCalled();
        $entityManager->flush()->shouldBeCalled();

        $this->register($form)->shouldReturn(true);
    }
}

Ten kod nie działa.

Powyższą specyfikację spełniać miał poniższy kawałek kodu.

Akceptuję

Ten serwis używa plików cookies. Więcej o plikach cookies.