Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Model
Forum PHP.pl > Forum > PHP > Object-oriented programming
daniel1302
Witam, od 2 dni szukam rozwiązania na swój problem, Bazując na frameworku Symfony, przenosząc treść obsługi do modelu zostałem zbeszczany i zrównany z ziemią. Pisząc post o wyjaśnienie mi problemu nikt nie odpisał. Do żadnego frameworka nie jest dodana aplikacja przykładowa w której model obsłuży baze lub XML
Proszę więc tutaj.

Proszę o podanie mi poprawnej implementacji modelu który obsłuży i bazę i XML.

Cyt. Crozin.
Jeżeli model ma korzystać z bazy danych to niech sobie z jakiegoś kontekstu (czy czegoś) pobierze obiekt i na nim operuje. Modele nie ograniczają się wyłącznie do lokalnej bazy danych...

Tego zdania nie zrozumiałem? Czy może mi ktoś wyjaśnić?
LBO
Pisząc o modelu w Symfony chodzi tobie na pewno o obiekty Doctrine lub Propel. No cóż, są one warstwą dostępu do bazy danych i jako takie trudno jest je użyć wraz z XMLem.

Rozwiązaniem jest wrzucenie takich obiektów (takich, czyli obiektów Doctrine/Propel jak i twoich własnych operujących na XML) w jakiś interfejs.

Tutaj znajdziesz kilka słów na ten temat.
daniel1302
Czy mogę prosić o wytłumaczenie?
Każdy mówi, że model musi być elastyczny, że aby przejść z DB na XML wystarczy zmienić jedynie 1, 2 zmienne, ale każdy mówi, że niemożna mieszać XML i DB
Crozin
Cytat
ale każdy mówi, że niemożna mieszać XML i DB
Skąd Ty te rewelacje bierzesz?

  1. <?php
  2.  
  3. class Abc{
  4. public function productsByCategory($categoryId){
  5. $xml = new MyOwnXMLReader('./data/products.xml');
  6. return $xml->find('/products[category=' . $categoryId . ']')->toArray();
  7. }
  8. }
Zmieniają się jakieś założenia... baza produktów zostaje przeniesiona do bazy danych.
  1. <?php
  2.  
  3. class Abc{
  4. public function productsByCategory($categoryId){
  5. $db = $this->getContext()->getDatabase();
  6. return $db->find('category=' . $categoryId)->fetchArray();
  7. }
  8. }
Potrzebujesz mieć równolegle dostęp do tych samych danych z dwóch różnych źródeł? Tworzysz interface i dwa obiekty go implementujące. Jeden odczytuje to z pliku (powiedzmy, że jest to cache), a drugi pobiera te dane z zewnętrznego serwera z xmla. Oba udostępniają ten sam interface, więc zmiana używanego obiektu ogranicza się do zmiany nazwy przy jego tworzeniu.
LBO
Cytat(Crozin @ 30.08.2009, 14:42:20 ) *
...więc zmiana używanego obiektu ogranicza się do zmiany nazwy przy jego tworzeniu.


To - programowanie na interfejsach - jest szerokim zagadnienie i zwykła podmiana

  1. $model = new MyDatabaseModel();


na

  1. $model = new MyXMLModel();


to jest zwykły hack.
Cypherq
Eeeee, to jak to inaczej się rozwiązuje?
LBO
Ano spójrz sobie w google na wzorce kreacyjne, albo z bardziej kompleksowych rozwiązań np. kontenery IoC.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.