Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tworzenie komponentu publicznego- pomysł na technologię
Forum PHP.pl > Forum > PHP
olekbiker
Witam,

tworzę bibiliotekę, którą najprawdopodobniej udostępnię publicznie. Mam jednak pewien dylemat: biblioteka ta będzie korzystać z bazy danych (6 powiązanych ze sobą relacyjnie tabel) i niestety nie wiem jakie rozwiązanie będzie najbardziej optymalne ze względu na dostępność. Zastanawiam się nad Doctrine ORM, jednak gdyby jakiś użytkownik chciał skorzystać z tej biblioteki, a nie posiadał komponentu Doctrine będzie zmuszony do jego instalacji, dublowania konfiguracji bazy danych, tworzenia podwójnych połączeń itp. Dodatkowo biblioteka korzystać będzie z komponentów Symfony, jednak one z zasady konfliktów większyć tworzyć nie będą. Jedynie konfiguracja może wymagać pewnych akrobacji.

Czy ktoś z Was miał podobny problem i jest w stanie zasugerować dobre rozwiązanie?

Z góry dzięuję za pomoc!

maniana
Może zamiast WIelkiego molocha jakim jest Doctrine, skożystać z czegoś mniej inwazyjnego, np:
Idiorm ORM => Nakładka na PDO (obsługuje MySQL, SQLite, Firebird, PostgreSQL)
Paris Active Record => Nakładka na powyższy Idiorm

Bardzo przyjemne w użytkowaniu, nie wymaga instalacji.
Crozin
Jeżeli kodu związanego z obsługą bazy danych nie masz zbyt dużo i są to w miarę proste operacje myślę, że najlepiej jeżeli zdecydujesz się na surowe PDO. Tam gdzie trzeba ręcznie utworzysz sobie obiekty na podstawie danych z bazy (w trywialnych przypadkach samo PDO może to zrobić za Ciebie). Dzięki temu niezależnie od tego z czego korzysta z klient Twojej biblioteki, będzie mógł on ją w miarę bezproblemowo połączyć ze swoim kodem.
Jeżeli zaś kodu wymagającego ORM-a jest więcej, śmiało korzystaj z Doctrine. Na pewno jest to lepsze rozwiązanie w porównaniu do innych ORM-ów, ponieważ: a) Doctrine jest popularny, więc ktoś już i tak może korzystać z niego w swoim projekcie; cool.gif Masz dostęp do porządnego, rozbudowanego ORM-a, który nie rzuca tak wielu kłód pod nogi.
olekbiker
Dziekuję za wszelkie sugestie. Posiadam napisaną bibliotekę pod własny framework, jednak różni się od popularnych, dlatego przed udostępnieniem biblioteki zmuszony jestem dokonać zmian i znaleźć rozwiązania, które pozwolą z niej korzystać wielu osobom. W obecnej wersji operacje na bazie danych wykonuje prosta klasa oparta na pdo. Skłaniam się jednak ku doctrine.

Mam jednak jeszcze jedno pytanie, mianowicie biblioteka przed użyciem będzie wymagać instalacji. Instalacja bedzie przebiegać w interakcji z użytkownikiem za pomocą formularzy, których zawartość wypełni w odpowiedni sposób tabele bazy danych. Tutaj również problem wiąże się z kwestią dostępności- jak wykonać ogólnodostępną stronę (lub kilka stron), które pozwolą na instalację biblioteki. Opcji widzę kilka:
  1. wykorzystanie symfony2 (jak uruchomić stronę, gdy aplikacja użytkownika nie korzysta z tego frameworka?)
  2. wykorzystanie jedynie potrzebnych komponentów symfony (chyba najlepsza opcja, skrypt wykorzystuje istniejące komponenty, jednak w zasadzie powiela funkcjonalność frameworka symfony2, użytkownik musi dokonać przekierowania na plik skryptu instalacyjnego)
  3. napisanie w jednym pliku brzydkiego skryptu zawierającego wszystkie operacje (proste i skuteczne, jednak brzydkie i wbrew podstawowym konwencjom, użytkownik musi dokonać przekierowania na skrypt instalacyjny).
  4. inne rozwiązania?

Przyznam, że zależy mi na prawidłowym podejściu i czystym, poprawnym kodzie. Będę wdzięczny za dalsze podpowiedzi!
kipero
A ja proponuję obejście tego w jeszcze inny sposób.
1. Stwórz własny interfejs, który będzie udostępniał wszystkie operacje na danych potrzebne wewnątrz biblioteki.
2. Zaimplementuj klasę, która implementuje ten interfejs i korzysta np. z Doctrine (patrz: adapter).
3. Ciesz się z elastyczności, która pozwala na wykorzystanie połączeń istniejącej aplikacji oraz dodanie nowych źródeł danych (np. XML, NoSQL, zwykłe pliki).

To co opisałem to tak pokrótce realizacja wzorca projektowego o nazwie most.
Crozin
Cytat
Mam jednak jeszcze jedno pytanie, mianowicie biblioteka przed użyciem będzie wymagać instalacji. Instalacja bedzie przebiegać w interakcji z użytkownikiem za pomocą formularzy, których zawartość wypełni w odpowiedni sposób tabele bazy danych.
To ma być biblioteka czy już jakiś gotowy "system"? Ile danych jest potrzebnych do jej poprawnego użycia na początku? Może wystarczy dorzucić jakieś informacje w dokumentacji dot. instalacji? Opisz dokładniej co to za biblioteka oraz co będzie ona wykonywać - wtedy też będziemy mogli łatwiej określić czy użycie Doctrine/komponentów Symfony jest dobrym pomysłem czy nie.
olekbiker
Pomysł z wykorzystaniem wzorców projektowych i wewnętrznego interfejsu może być ciekawym. Zastosowanie dodatkowej warstwy pozwoli (przynajmniej w domyśle) na uniezależnienie od ORM. Wymaga to jednak wielu przemyśleń.

Co to za biblioteka? Będzie to obiektowa nakładka na Allegro Web Api z dodatkowymi funkcjami wspomagającymi korzystanie z tego rozbudowanego Api. Co będzie wykonywać? Generalnie odpowiadać zarówno za połączenie z Allegro jak i zarządzanie danymi zwrotnymi. Konstrukcja biblioteki będzie pozwalać na podpowiedzi IDE zarówno dla klas reprezentujących funkcje API jak i danych zwrotnych, również przez obiekty reprezentowanych.

Pozostaje jednak jeszcze pytanie o skrypt instalacyjny...
kipero
Jeśli ma to być biblioteka, to ja pominąłbym kwestię instalacji. To już powinno być zawarte w konkretnej aplikacji, która będzie korzystać z Twojej biblioteki - ponadto jeśli zdecydujesz się na dodanie poziomu abstrakcji, który opisałem wcześniej, to będzie to nawet wskazane, gdyż nie będziesz narzucał konkretnych struktur do przechowywania danych.
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.