![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 2 Dołączył: 1.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Raczkuję w programowaniu zorientowanym obiektowo i mam do Was pytanie, a raczej prośbę. Otóż w projekcie nad którym obecnie pracuję jest wyszukiwarka. Pisałem ją ze 2 lata temu i jest tam mnóstwo instrukcji warunkowych, w których w chwili obecnej trudno się połapać. Przyszło mi do głowy, by ją przerobić w stylu OOP. Chciałbym by wyszukiwarka była maksymalnie elastyczna. Widzę to tak, że mam kilka klas, z których każda szuka lub filtruje inne dane i jeśli klient zażyczy sobie kolejny filtr, to chciałbym tylko dopisać jedną klasę. Problem w tym, że za bardzo nie wiem jak to wszystko opakować w klasy. Pewnie potrzebny będzie jakiś interfejs, może trzeba wykorzystać jakiś wzorzec projektowy? Proszę o w miarę konkretne wskazówki jak rozwiązać problem. Może jakiś pseudokod? Pozdrawiam. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Wygląda mi to na sztukę dla sztuki. Rzucasz mądrymi terminami, ale chyba nie do końca masz świadomość ich znaczenia. Przedstaw może swoją wizję jak miałaby działać ta obiektowa wyszukiwarka, co rozumiesz pod pojęciem filtrów jako obiektów. Jak dla mnie prościej dopisać warunek typu:
Kod if (wybrano_jakies_pole) { dodaj_wartosc_do_warunku(); } Po co mieszać w to jakieś obiektowe filtry? Przecież to i tak sprowadza się do utworzenia kolejnego warunku WHERE w zapytaniu (chyba, że to jakaś wyszukiwarka szukająca poza bazą danych). |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 2 Dołączył: 1.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wyszukiwarka ma szukać w kilkunastu tabelach w bazie.
Teraz właśnie mam tak rozwiązane, że w zależności od tego co otrzymam POST-em wybieram odpowiednie zapytanie i rozbudowuję warunek. Ale tych warunków jest bardzo dużo i w tych warunkach są pozagnieżdżane kolejne warunki, a w nich kolejne. Chcąc teraz dodać nową funkcjonalność wyszukiwania muszę się ostro nakombinować. Chciałem to jakoś uprościć, żeby uniknąć tej gmatwaniny warunków. Myślałem, że po prostu jest na to jakiś sposób, który w przypadku dodawania nowego kryterium wyszukiwania ograniczałby się tylko do napisania nowej klasy ze specyficzną metodą szukającą odpowiednich danych w odpowiednim miejscu. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 561 Pomógł: 72 Dołączył: 15.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Myślę, że dobrym rozwiązaniem jest skorzystanie z jakiegoś ORM'a np Doctrine lub Propel. Pozwaają one w przyjemny sposób operować na zapytaniu jak na obiekcie, dodając kolejne warunki do budowanego zapytania.
-------------------- Nawet świnka może wejść na drzewo kiedy jest chwalona :)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Wyszukiwarka ma szukać w kilkunastu tabelach w bazie. - tak czy siak jesteś skazany na porażkę, modyfikacje będą czasochłonne, wyniki wyszukiwanie niedokładne i co z wydajnością?Chciałem to jakoś uprościć, żeby uniknąć tej gmatwaniny warunków. - nie da się, tu i tu musisz mieć jakiś model danych, który w przypadku OOP będzie nawet bardziej skomplikowany i rozbudowany niż tradycyjny, strukturalny.Najlepiej użyć czegoś w stylu: http://lucene.apache.org/ Lub wykorzystać googla, jeśli wszystkie dane są na stronach a te są dobrze poindeksowane to nie będzie problemu. Inaczej jak? A jak serwis się rozrośnie do 50 tabel? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 05:23 |