2009-10-26 17 views
5

Tworzę prosty blog i chcę użyć do tego klasy. Zastanawiam się, jaki może być najlepszy sposób na to. Jak dotąd widzę 3 metody. Zrobiłem zajęcia, które zawierały linki, posty i komentarze. Problem z zwróceniem wszystkich tych danych w pojedynczej tablicy polegał na tym, że dane, które tylko powinny zostać powtórzone za jednym razem, powtarzały się tyle razy, ile zwracanych jest wierszy. Niektórzy powiedzieliby, że to jest poprawne i że powinienem mieć wszystko w jednym układzie. Nadal nie jestem przekonany, że to właściwa droga.Projektowanie klasy PHP. Właściwa droga

Naprawdę doceniłbym pewne informacje na temat tego, jak niektórzy z was mogą zaprojektować klasę do obsługi tych 3 rzeczy. Jedyne, czego potrzebuję do tej klasy, to link do bazy danych. Czego inni członkowie, których powinienem użyć, są dla mnie niejasne. Ponownie chciałbym uzyskać punkt widzenia na temat tego, jak należy to zrobić.

Dzięki, John


OK, więc gdybym miał powiedzieć 3 metody takie jak to:

var $db; 

function GetPosts() { 
//posts 
} 

function GetComments() { 
// blog comments 
} 

function GetLinks() { 
// links for the blog 
} 

Co może być niektórzy członkowie faceci mogliby wykorzystać?

Ponadto, zastanawiam się, czy powinienem mieć metodę, która wywołuje inne metody. Tylko jedna publiczna metoda, a następnie uczyń wszystkie te metody prywatnymi. Metoda publiczna wywoła prywatne metody i zwróci ich wartości. Czy to jest wskazane?

+0

Z mnóstwem darmowych platform blogowych o otwartym kodzie źródłowym, do których chcesz dążyć? Jakie specjalne cechy proponujesz? – jldupont

+3

Właściwie nie tylko na blogach i komentarzach. Po prostu lubię aspekt programowania. :) – JohnB

+2

Zakładam, że jego celem jest poznanie php i designu bardziej niż tworzenie oprogramowania do blogowania, z którego będą korzystać inni. – marr75

Odpowiedz

0

CakePHP ma tutorial on creating a blog przy użyciu powszechnie przyjętej struktury CakePHP. Jeśli chcesz nauczyć się nowych frameworków podczas programowania swojego bloga, polecam to.

Jeśli chcesz ręcznie zakodować wszystko, chociaż sugerowałbym utworzenie klas do obsługi ładowania i zapisywania (utrwalania) twoich obiektów (linków, komentarzy do postów) lub używania szkieletu trwałości (np. Doctrine ORM for PHP).

Problem polega jednak na tym, że można zaimplementować opisaną tu funkcjonalność na wiele różnych sposobów; nie ma uniwersalnej odpowiedzi. Jeśli prześlesz kod, łatwiej będzie udzielić konkretnej porady.

+0

Cześć Gergely Orosz, dzięki za odpowiedź. Próbowałem już kilku różnych frameworków, ale nie dbam o nie. W każdym razie dla mnie sama zabawa wymaga zabawy. Wiem, że istnieje wiele funkcji pomocniczych i wszystkie, ale spotkałem innych "programistów", którzy nie mają pojęcia, co dzieje się za tymi ramami. Nie zrozumcie mnie źle, podoba mi się framework, ale bardziej podoba mi się współpraca. Dodam kilka rzeczy do mojej klasy powyżej i może dasz mi kilka wskazówek. Dzięki jeszcze raz! – JohnB

1

Jeśli chcesz napisać to sam od zera, zacznę od utworzenia osobnych obiektów dla każdej części bloga, tj. Obiektu postu, obiektu komentarzy, obiektu linku.

Następnie można się zastanowić, jak te obiekty będą ze sobą współdziałać (na przykład obiekt postu może zawierać tablicę obiektów komentarzy) i jak będą obsługiwać podstawowy CRUD (tworzenie, odczytywanie (pobieranie), aktualizowanie, usuń) operacje.

+0

Witam GSto, dzięki za odpowiedź. Zgadzam się z tobą o oddzielnej klasie dla każdej części bloga. Słyszałem, że robienie tego w ten sposób utrudnia utrzymanie nienaruszonej abstrakcji. Nadal nie jestem tego pewien. Zamierzam dodać kilka rzeczy do powyższych metod i może możesz dać mi znać, co zrobiłbyś, aby to zmienić. – JohnB

+0

jak zrobić to w ten sposób boli abstrakcji? Uważam, że łatwiej byłoby utrzymać to w ten sposób, zamiast mieć jedną klasę blogów, która zajmuje się wszystkim. – GSto

0

Nie znam szczegółów zadania, które chcesz osiągnąć, ale pomyśl o jednym blogu z klasą fabryczną, który ma na przykład metodę GetPostManager(). PostManager może tworzyć, edytować, aktualizować posty i wybierać je również. Zatem $ Blog-> GetPostManager() -> GetPosts ($ datefrom, $ dateto) zwróci klasę PostCollection, która implementuje interfejsy Countable i Iterator, aby przeglądać posty. PostCollection to tablica zawierająca klasę PostItem. Klasa PostItem to prosta klasa, która może odwzorować na właściwości jej bazy danych.

+0

Dzięki FractalizeR. Fabryczny wzór brzmi dobrze. Czy powiedziałbyś, że niewłaściwym byłoby stworzenie klasy za pomocą tych 3 metod? Wiem, że istnieje ponad 100 sposobów robienia rzeczy, ale myślę, że szukam "najlepszego" sposobu. Niekoniecznie najłatwiejszy. Sądzę, że ostatecznie powinien być w stanie skalować, jeśli kiedykolwiek chciałbym to zrobić. – JohnB

+0

Nie, klasa z trzema metodami jest dobra ... Ale dopóki nie rozszerzysz swojego systemu. Jeśli chcę dodać więcej funkcji, Twoja jedna klasa szybko zostanie przepełniona przez coraz więcej metod. Tak więc, myślę, że lepiej jest stworzyć trochę struktury na początku. Zwłaszcza, jeśli nie jest to bardzo skomplikowane. –

Powiązane problemy