Wzorce projektowe to bardzo ważna część “zawodu” analityka i architekta oprogramowania. Dzisiaj kolejny raz studenci pytali o literaturę, więc postanowiłem poszperać na półce. O tym dlaczego powstały wzorce i jak sie je opisuje napisano wiele, nie będę więc powtarzał tego co na prawde łatwo znaleźć. Generalnie wzorce są to skatalogowane standardy i dobre praktyki .
Większość obiektowych wzorców projektowych dotyczy kwestii (rozwiązywania problemów) technologicznych. Myślę, że większość frameworków (zestawy bibliotek środowiskowych) to implementacje wzorców opisanych w książkach wymienionych poniżej . Warto je więc poznać z tego choćby powodu, by rozumieć jak one działają i dlaczego są takie jakie są.
Nieco później powstały wzorce architektoniczne, takie jak sztandarowy MVC (Model-View-Controller). Te przydają się na etapie analizy i projektowania na wysokim poziomie abstrakcji.
Lektura tych pozycji pokazuje ewolucje pojęcia paradygmatu obiektowego i pojęcia obiektu. Tak zwane “stare”, implementacyjne podejście z początków technik obiektowych pojmowanie definiowało obiekt jako połączenie danych i funkcji. Ta definicja nadal pojawia się u wielu autorów. Obecnie raczej stosujemy definicję mówiącą, że obiekt mają określoną odpowiedzialność, reprezentują określone zachowanie [Shalloway].
Tak więc polecam lekturę poniższych pozycji, duża rezerwę w stosunku do podawanych definicji. Praktycznie wszystkie te książki to wiedza z końca lat 90-tych. Od tamtej pory, zmieniło się wiele detali, jednak ogólna zasada polegająca na hermetyzowaniu wszystkiego co się da i na tym, że obiekt to określona wąska specjalizowana odpowiedzialność, nadal jest na czasie. Historyczna definicja mówiąca, że obiekty to dane i funkcje je przetwarzające, została już nie raz “obalona” za sprawą wzorców takich jak service czy factory, wskazujących że należy z zasady oddzielać odpowiedzialność za utrwalanie danych i odpowiedzialność za ich tworzenie i przetwarzanie.
Tak więc w wolnej chwili zapraszam do lektury, a także do pytań i dyskusji pod tym tekstem.