Ostatnie miesiące i całkiem duży projekt

9 październik 2007, autorstwa: kozik

We wpisie o Zastoju wspomniałem o kilku ciekawostkach, których szerzej opisać wtedy nie mogłem. Nie trudno zgadnąć, że miało to związek z odliczaniem do 24 września - do daty wyjścia NEXTA. Teraz mogę swobodnie rozwinąć temat.

Strona internetowa PC Formatu to nic innego jak budowana od początku w całości przeze mnie aplikacja internetowa typu CMS. Niekoniecznie taka jak popularne CMS-y ogólnego przeznaczenia (np. Mambo, PHP-Nuke itp.), ale do tego się w dużej mierze sprowadzająca. Z ukierunkowaniem na bezpieczeństwo, wydajność i skalowalność.

Wraz z podjęciem decyzji przez Wydawnictwo o wyjściu NEXTA na rynek (po długim czasie jego przygotowywania) trzeba było zacząć projektowanie i budowę jego witryny. Oczywiście niczego od zera tworzyć nie było sensu - jest gotowa aplikacja internetowa. Jednak decyzję “copy&paste” sprowadzającą się do równolegle działającej witryny całkowicie odseparowanej od PCF odrzuciłem z miejsca. To idiotyzm nie skorzystać z możliwości integracji i budowy Serwisu.

Cele?

  1. Jedna aplikacja internetowa, ale z lokalnymi modyfikacjami na potrzeby poszczególnych witryn (przy czym do takiej modyfikacji zaliczyć należy też całkowitą zmianę wyglądu).
  2. Aplikacja korzystająca w wielu miejscach ze współdzielonej bazy, a w innych z osobnej.
  3. Aplikacja integrująca się przede wszystkim w zakresie wspólnego konta użytkownika i zarządzania tym kontem.

Rozwiązaniem założenia nr 1 jest wydzielenie części wspólnej źródeł (możliwie jak największej), szukanie podobieństw i parametryzowanie działania tego samego kawałka kodu w zależności od aktualnego serwisu. Tak by różnica w kodzie pomiędzy witrynami była jak najmniejsza - uprości to zarządzanie i rozwój. Podział kodu można zrobić i na zasadzie różnych katalogów na dysku (tak było początkowo), ale rumieńców to nabiera dopiero przy systemie kontroli wersji i gałęziach.

Jeśli chodzi o wybór otwartego rozwiązania, to chyba nie ma dyskusji - SVN, czyli Subversion. Repozytorium zawiera wspólny kod dla całej aplikacji oraz gałęzie dla poszczególnych serwisów (tj. gałąź NEXT i PCF).

Daje to nie tylko dokładną kontrolą zmian (i błędów!) w kodzie, ale i łatwe scalanie zmian, możliwość automatycznego tworzenia dokumentacji, testowania czy generowania buildów co zadany okres. Jest to wstęp do prawdziwego Extreme programming (uwaga: zalinkowałem artykuł na Wikipedii, ale zawsze trzeba mieć na oku jej “fachowość” /czyt. brak fachowości/).

A co z punktami 2 i 3 wcześniejszej listy? Jedna baza dla użytkowników oraz niektórych z treści na różnych aplikacjach? W relacyjnej bazie danych (RDBMS) rozwiązaniem są widoki tabel (wspierane przez MySQL poczynając od 5.0). Wspólne dane umieszczone w jednej bazie są dostępne w innych bazach poprzez widok. Dodatkowo można modyfikować co ze wspólnej bazy zostanie każdej z aplikacji udostępnione. Nawiasem mówiąc takie podejście ociera się blisko o dziedziczenie i kto wie, czy to nie byłoby lepsze rozwiązanie (rzecz jasna już nie na RDBMS).

Widoki, o ile nie korzystają z tabel tymczasowych czy bardziej skomplikowanych zapytań SELECT, nie stanowią narzutu wydajnościowego - indeksy te same, dane w praktyce te same… Rozwiązanie piękne w swej prostocie i skalowalności.

Efekt? www.pcformat.pl, www.nextmag.pl i ewentualnie co komu przyjdzie w przyszłości do głowy, to jedna duża aplikacja internetowa mająca wspólne serce, ale różne skórki i różne niektóre funkcjonalności. Dająca użytkownikowi jedno konto otwierające wszystkie witryny serwisu. Mogąca być rozbudowywana wspólnie jako całość lub kompletnie asynchronicznie (każde pismo swoją rzepkę skrobie).

Problem i jego rozwiązanie było naprawdę pouczające i ciekawe. To było fajne wyzwanie :) .

Wysłano w Blog - Web | Tags: , , , , |

Adres dla trackback. RSS dla komentarzy w tym wpisie.
Dodaj komentarz




Uwaga: Włączona jest moderacja komentarzy, więc nowy komentarz nie ukaże się bezpośrednio po jego wysłaniu.

Uwaga: Działa filtr antyspamowy. Jeśli umieścisz w komentarzu odnośniki, to może on zostać błędnie zakwalifikowany jako spam.