Ten wpis nie będzie kompletną recenzją książki Patterns of Enterprise Application Architecture Martina Fowlera, a jedynie kilkoma zebranymi w jednym miejscu spostrzeżeniami. Książkę uznałem za wartą przeczytania ze względu na to, jak szeroko jest cytowana. Czy zrobiłem słusznie, czy nie, o tym za chwilę.
Książka zaczyna się od wstępu stanowiącego przegląd problemów, które pojawiają się w aplikacjach klasy enterprise. Jako przykłady takich aplikacji Fowler podaje systemy rezerwacyjne, finansowe i logistyczne. Dalszą część książki – i objętościowo większą – stanowi opis poszczególnych wzorców, które mają zastosowanie w budowaniu aplikacji klasy enterprise. Fowler nie jest jedynym autorem poszczególnych rozdziałów.
Aktualność
Więszkość przykładów kodu jest w Javie, mniejsza część w C#. Niektóre przykłady kodu wydawały mi być pisane za bardzo na piechotę, jak ręczne uzyskiwanie połączeń z puli, czy ręczne zarządzanie transakcjami. Ale te przykłady wyglądają tak przecież nie dlatego, aby wypełnić czymś miejsce w książce, a dlatego, ze tak się wtedy, ponad 15 lat temu, pisało. To tylko pokazuje, jak wielki postęp uczyniliśmy od tego czasu. Duet Spring + Hibernate daje nam zarządzać transakcyjnością za pomocą jednej adnotacji, a pulę połączeń w ogóle ukrywa przed typowym programistą.
Część problemów wydajnościowych, które adresują opisy poszczególnych wzorców, rozwiązało się naturalnie samo wraz ze wzrostem mocy komercyjnie dostępnych komputerów osobistych i serwerów. Inne pozostają stale aktualne. Spacery do bazy danych były kosztowne w 2002 roku, i dalej są czymś, na co trzeba stale mieć oko, gdy buduje się złożone systemy.
Dla kogoś ze świata Javy, wiele wzorców podawanych w książce jako wiedza świeża i wymagająca propagowania, jest już w tej chwili przestarzałych. Powodem absolutnie nie jest jednak to, że wzorce te były chybionymi pomysłami, które nie przyjęły się w praktyce. Wręcz przeciwnie! Wiele z tych wzorców zostało zaimplementowanych we frameworkach, których używamy na co dzień, dzięki temu mamy luksus pozostawania ignorantami w kwestii tego, skąd pochodzą pewne koncepcje. Przykładowo, to, co znamy jako entity w frameworku Hibernate, to Row Data Gateway z książki Fowlera. Wzorce Lazy Load, Foreign Key Mapping, Repository i Embedded Value wprost przekładają się na pojęcia znane z Hibernate’a.
Niektóre z wzorców z ksiązki Fowlera nie znalazły szerszego uznania w świecie Javy, jak Active Record – i w tym akurat przypadku może to i lepiej! Jeszcze inne zdezaktualizowały się (np. Two Step View), ponieważ frontend budujemy obecnie za pomocą Angulara, Reacta albo Vue.js, a w 2002 roku HTML-e wypełnione danymi powstawały po stronie serwera. Jeszcze inne doczekały się własnych bibliotek implementujących je, jak Data Mapper, który jest zaimplementowany w MapStrucie, lub Money, który jest zaimplementowany w Joda-Money.
Podsumowanie
Patterns of Enterprise Application Architecture to świetna lekcja historii, pokazująca, jak rodziły się koncepcje, które obecnie często są oczywiste. Czasami widać wręcz pewne idee na ich wcześniejszym etapie rozwoju względem tego, co wiemy obecnie. Niemniej nieraz w czasie lektury miałem wrażenie, że poznaję rozwiązania problemów, które w 2018 roku zostały już skutecznie rozwiązane przez innych.
Z punktu widzenia historii praktyk wytwarzania oprogramowania, to na pewno bardzo ważna książka. Myślę jednak, że dla kogoś, kto chce po prostu szybko poszerzyć praktyczną wiedzę, której użyje w pracy lub w pet projektach, nie jest to pozycja obowiązkowa. Gdybym miał doradzić sobie z przeszłości, czy tę książkę przeczytać, powiedziałbym, że najlepiej odłożyć ją koniec kolejki, nadać niski priorytet, a na razie sięgać po ważniejsze pozycje – a przynajmniej takie, które wydają się ważniejsze.
Książka jest też dostępna w Helionie pod polskim tytułem Architektura systemów zarządzania przedsiębiorstwem. Wzorce projektowe.