Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dylemat projektowy - model w modelu, Na jeden model składają się dwa inne.
jarek_bolo
post 27.03.2009, 18:15:15
Post #1





Grupa: Zarejestrowani
Postów: 149
Pomógł: 12
Dołączył: 3.03.2008
Skąd: łódzkie

Ostrzeżenie: (0%)
-----


Korzystam z frameworka Kohana, ale myślę, że jest to w miarę niezależny od tego problem.

Mam model User, na którego składają się zawsze jeden Adres, i jeden lub więcej Samochodów.

I teraz dylemat polega na tym w jaki sposób dodawać model User?

Opcja 1:
Czy w akcji dodaj, kontrolera users po kolei stworzyć obiekty składowych modeli, dodać je (oczywiście zgodnie z kolejnością wymuszoną strukturą bazy i odwołaniami kluczy obcych) przypisując odpowiednio wartości kluczy obcych?
  1. <?php
  2. /**
  3.  * Kontroler (modele standardowe)
  4.  */
  5. class Users_Controller extends Controller {
  6.  
  7.  public function dodaj() {
  8.    // start transaction
  9.    $adres = new Adres_Model();
  10.    $adres->add();
  11.    // najpier dodaje adres, bo z racji tego, że user może mieć tylko jeden adres
  12.    // uznałem, że id rekordu adresu powinno znajdować się w tabeli User
  13.  
  14.    $user = new User_Model();
  15.    $user->adres_id = $adres->id;
  16.    $user->add();
  17.  
  18.    $car = new Car_Model();
  19.    $car->user_id = $user->id;
  20.    $car->add();
  21.    // commit
  22.  }
  23. }
  24. ?>


Opcja 2:
Czy może w akcji dodaj, kontrolera users wywołać metodę add() obiektu reprezentującego model User, a odpowiednie składowe modelu User, pododawać wewnątrz metody add()questionmark.gif

  1. <?php
  2. /**
  3.  * Model
  4.  */
  5. class User_Model extends Model {
  6.  
  7.  public function add() {
  8.    $adres = new Adres_Model();
  9.    $adres->save();
  10.  
  11.    $this->adres_id = $adres->id;
  12.    $this->save();
  13.  
  14.    $car = new Car_Model();
  15.    $car->user_id = $this->id;
  16.    $car->save();
  17.  }
  18. }
  19.  
  20. /**
  21.  * Kontroler
  22.  */
  23. class Users_Controler extends Controller {
  24.  
  25.  public function dodaj() {
  26.    $user = new User_Model();
  27.    // start transaction
  28.    $user->add();
  29.    // commit
  30.  }
  31. }
  32. ?>


Wybierając opcję 1 mam mniej powiązane ze sobą modele. Ale za to nawalone w kontrolerze kodu co przeczy zasadzie chudy kontroler gruby model.
Opcja 2 jest bardziej intuicyjna, kontroler raczej nie powinien być świadom z czego się skłąda user. Ma dodać usera i koniec. Obiekt Usera wie co jest mu do życia potrzebne i sobie to sam dodaje.

A może są jeszcze jakieś inne opcje??
Kłaniają się tu pewnie wzorce projektowe. Może jakaś fabryka Userów ?


--------------------
"Jeden człowiek nie zmieni świata, ale jeden człowiek może przekazać informację która zmieni świat." - David Icke
| PAMIĘTAJ, JESTEŚ POLAKIEM !!! |
Jam jest Polska, Ojczyzna Twoja, ziemia Ojców, z której wzrosłeś. Wszystko, czym jesteś, po Bogu - mnie zawdzięczasz!!
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 21:49