Witam,
Chciałbym, żeby ktoś mi pomógł załapać pewną rzecz, która pojawiła się w mojej głowie po wstępnym zderzeniu się z tematem wzorców projektowych. Nie wiem, czy zacząłem za dużo kombinować i namieszałem sobie w głowie, czy może moja niepewność ma jakiś sens.
Szczegóły:
Mam aplikację w Yii i załóżmy, że będziemy zajmować się w niej notatkami, które chcę dodawać do różnych rzeczy (notatki do firmy, do produktów itd.). Póki co mam więc:
-
kontroler: NotatkaController;
-
modele: Notatka (tabela w db "Notatka"), NotatkaFirma (tabela w db "Notatka_Firma"), NotatkaProdukt (tabela w db "Notatka_Produkt")
(Oczywiście Notatka_Firma i Notatka_Produkt to tylko tabele zawierające jedynie klucze, które zawierają powiązania tabel firma z notatką i produkt z notatką. Więc może powinienem zostawić tylko tabelę Notatka i do niej ładować kolejne kolumny, czyli dorzucać firma_id, produkt_id itd.?)
O co chodzi:
Załóżmy, że mam standardowy kod w kontrolerze:
public function actionCreate()
{
$model=new Note;
if(isset($_POST['Note']))
{
$model->attributes=$_POST['Note'];
if($model->save())
$this->redirect(array('show','id'=>$model->note_id));
}
$this->render('create',array('model'=>$model));
}
I tak sobie ubzdurałem, jakby to zrobić, żeby z tej samej metody móc zapisywać albo notatki do firm, czyli modele Notatka i NotatkaFirma, albo notatki do produktów, czyli Notatka i NotatkaProdukt? Żebym mógł wywołać metodę notatka/create i w jakiś sposób manipulować danymi w jednej metodzie, żeby zapisać odpowiedni model i wyrzucić odpowiedni widok?
Chyba, że najlepszym wyjściem jest wrzucanie po prostu kolejnych metod typu createNotatkaFirma, createNotatkaProdukt itd. i powielać ten sam kod, tylko zmieniać modele?
Co wtedy, gdy pojawi się, hmm, NotatkaKlient - kolejna metoda w kontrolerze?
Próbuję zrozumieć, jak w takim wypadku można najlepiej wykorzystać ten sam kod, a później tylko dokładać sobie modele i edytować jak najmniej kodu. A może po prostu się mi wydaje…