Cytat(ExPlOiT @ 26.12.2011, 15:45:56 )

Witam,
Zastanawia mnie jeden fakt, jak u Was wygląda tworzenie klas. Weźmy np na odstrzał klasę odpowiedzialną za obsługę użytkowników. Moje pytanie dotyczy tego, czy pakujecie wszystko co związane z użytkownikiem do jednej klasy, czy np dzielicie to w jakiś sposób.
Według mnie mądrym sposobem jest podział np obsługi użytkownika na 2 klasy. A dokładnie:
user.class.php<?php
class User
{
public function viewOne($id)
{
//Function code
}
public function viewAll()
{
//Function code
}
}
?>
userManager.class.php<?php
class UserManager
{
public function add($login, $password)
{
//Function code
}
public function delete($id)
{
//Function code
}
public function update($id, $login, $password)
{
//Function code
}
}
?>
Idąc na logikę, menadżer jak sama nazwa wskazuje służy do zarządzania, czyli dotyczy tych rzeczy o których wspomniałem. Czy stosujecie podobne rozwiązanie, czy też zupełnie inne? Mnie te wydaje się dobre, z tego względu, że jest większy porządek, i łatwiej się we wszystkim odnaleźć. Ponadto takie rozwiązanie można praktycznie zastosować przy artykułach i całej reszcie.Ale chciałbym wiedzieć, co wy o tym myślicie?
Klasa User powinna reprezentować >jednego< usera. Więc daj do niej wyłącznie pola, metody związane z tym jednym obiektem.
Metody typu viewOne/viewAll powinny należeć do klasy UserManager. I wtedy
- viewOne zwraca obiekt typu User
- viewAll zwraca array (lub inny typ kolekcji) obiektów typu User.
- viewTychKtórzyDodaliPostNaForum()

< ta metoda nawet będzie potrzebowała dostęp do tabeli w DB z postami. Więc też nie myśl tak, że UserManager może operować wyłącznie na danych z tabeli Userów. Do niektórych operacji jest potrzebny dostęp do innych tabel.
Jeżeli miałbyś te metody w klasie User to nie byłoby to zbyt logiczne.
wyobraź sobie takie użycie:
// tworzymy nowego usera
$user = new User();
$user->setFirstName("Jan");
$user->setLastName("Kowalski");
$user->setEmail( $user->generateEmail() ); // User::generateEmail() generuje adres na podstawie firstname i lastname i go zwraca
$userManager = new UserManager($db); //przekazujemy instancję 'połączenia' z DB na której ma operować UserManager
// dodajemy nowego użytkownika ("rejestrujemy" go w serwisie?)
$userManager->add($user);
// inne możliwości:
$anotherUser = $userManager->find(42); // find wyszukuje usera na podstawie jego ID i zwraca go
$users = $userManager->findAll(); //zwraca kolekcję userów.
foreach($users as $user) {
}
nie jest to w takim przypadku najbardziej oczywisty sposób rozwiązania problemu?

pozdrawiam, Antoni