Jakiś czas temu zetknąłem się z frameworkiem Django dla języka Python. Oprócz samego języka, który jest zdecydowanie bardziej nowoczesny w Django szczególnie urzekła mnie jedna rzecz.
Chodzi o sposób definiowania struktury dla bazy danych. Otóż w Django odbywa się to tylko w jednym miejscu - w plikach modeli.
Dlaczego jest to takie fajne? Posłużę się antyprzykładem z cakePHP.
Wyobraź sobie, że masz projekt i zarządzasz jego wersjami za pomocą popularnego SVN, czy CVS. Najczęściej pracujesz na lokalu i we wczesnych fazach projektu to dodasz pole w bazie danych w jakimś miejscu, do zmienisz indeks. Robisz commit kodu, który na nowej strukturze działa dobrze, ale struktura bazy danych nie podlega wersjonowaniu.
Zatem albo musisz zrobić eksport struktury do pliku który jest wersjonowany, albo (jak często odbywa się to w moich projektach) - robisz zmiany na pewnej głównej i ogólno dostępnej bazie (co by reszta mogła sobie ściągnąć nową wersję).
Pierwsze rozwiązanie sprawia, że przybywa Ci pracy. Wiem, że to nie dużo, ale zawsze jedna dodatkowa rzecz o której musisz pamiętać. A w przypadku gdy commit zrobiłeś po tygodniu pracy, bo wcześniej cały system się sypał - możesz zapomnieć o takich szczegółach jak dodanie pola na początku.
W przypadku jest jeszcze gorzej. Oprócz problemów opisanych powyżej dochodzi niebezpieczeństwo usunięcia całej bazy, brak możliwości powrotu z bazą do wcześniejszej wersji.
Z kolei w django możesz zapomnieć o phpMyAdminie i innych. Całą strukturę bazy danych masz zdefiniowaną w modelu i jednym poleceniem synchronizujesz jej wersję w silniku bazy z definicją w modelu.
Oczywiście do podejścia trzeba się przyzwyczaić. W cake'u trzymając się konwencji wszystkie modele mogą wyglądać tak:
class TabelaWFormieLiczbyPojedynczej extends AppModel {};
W django - to co nie istnieje w modelu - nie istnieje w bazie.
Ciekaw tylko jestem jak to się sprawdza przy nietypowych sytuacjach, które nieraz wymagają nieco karkołomnych konstrukcji w projekcie bazy danych i specyficznych zapytań sql. Moja znajomość samego Django jest na ten moment za mała, żeby odpowiedzieć na to pytanie.
Uwaga, blog przeniesiony
Posty na tym blogu już nie będą się pojawiać. Zapraszam gorąco pod nowy adres:
blog.grzegorzpawlik.com
Subskrybuj ten blog...
Subskrybuj:
Komentarze do posta (Atom)
Uwaga! blog przeniesiony
Posty na tym blogu już nie będą się pojawiać. Zapraszam gorąco pod nowy adres:
blog.grzegorzpawlik.com
Komentowanie artykułów możliwe jest pod nowym adresem.
2 komentarze:
Korzystam z cakePHP ponad rok - z django też korzystałem - hosting mam na http://newrails.pl i do wyboru o dziwo dwie bazy mysql i postgresa (co jest rzadkiw dla PHP) - w praktyce nie ma sensu więc zarzut,że w cake'u model niejako dodefiniowuje się w bazie bo i tak nie będziesz przerzucał się między 10 bazami , taka sytuacja jest na homie czy ofałha
Chodziło mi o problemy nieco innej natury. Otóż w fazie wczesnego rozwoju oprogramowania struktura bazy często się zmienia. Często zmieniają ją poszczególni programiści, więc istnieje naturalna potrzeba zachowania modelu bazy w repozytorium. W cake-1.2 pierwszym podejściem do tego problemu jest ShemaShell.
Prześlij komentarz