Modyfikacja klas frameworku

0

Cześć. Pracuję w firmie, w której projekt jest oparty na ZF 1.12 bodajże. Jak możecie sobie wyobrazić jest to strasznie upierdliwe. Sporo rzeczy trzeba robić na około (np. jeszcze do niedawna trzeba było pisać subquery, żeby zrobić proste OR w where). Do tej pory jakoś sobie radziłem bez modyfikowania klas Zenda, ale doszedłem do ściany. Potrzebuję wprowadzić dwie modyfikację w Zend_Db_Select i nie bardzo wiem jak to zrobić. Kilka razy jak na początku swojej kariery zdarzyło mi się zmodyfikować bibliotekę to zwrócono mi uwagę, że tak się nie robi. Jak to wygląda jeżeli chodzi o framework? Czy mogę zmodyfikować sobie taką klasę, żeby nie trzeba było się męczyć? Czy lepszym wyjściem będzie przysłonięcie metody klasy bazowej poprzez skopiowanie jej i przeprowadzenie drobnej modyfikacji (dopisanie dosłownie linijki, ale jakże znaczącej).

1

Nie będzie wygodniej Ci utworzyć klasę dziedziczącą z Zend_Db_Select i sprawić, aby ta Twoja klasa docelowa z niej dziedziczyła?
Z całą pewnością jest to lepsze rozwiązanie niż modyfikacja frameworka.

0

No wlaśnie o tym myślałem, ale wydawało mi się to strzelanie do muchy z armaty podczas gdy muszę np. dodać w ifie

$column instanceof Zend_Db_Select
// oraz
if(is_null($col)) {
    $col = new Zend_Db_Expr('NULL AS ' . $alias);
}

Poza tym problem w tym, że u nas już takie klasy są. Dwie. Przez co trzeba w takim wypadku użyć traita, tak jak zrobiłem z where.
Czy np. wywalenie całej metody _renderCols w której potrzebuję wprowadzić zmiany do traita i wrzucenie go do klas dziedziczących po Zend_Db_Select jest złym pomysłem?

@W takim razie chyba przysłonie je w klasach dziedziczących. Chyba, że ktoś coś innego zaproponuje :)

0

Ew. traity - też jakieś rozwiązanie, natomiast nie wiem jaką macie tam hierarchię klas i ciężko stwierdzić czy wyjdzie lepiej, czy tak samo ;)

Poza tym problem w tym, że u nas już takie klasy są. Dwie.

Skoro już są takie klasy (w domyśle - robiące to co chcesz), to w jakim celu chciałbyś tworzyć jeszcze jedną/traita/whatever?

0

Trochę dziki. Dlaczego dziedziczenie to strzelanie do muchy z armaty?
Jak są już dwie klasy które robią co chcesz to czemu z nich nie skorzystasz? I nie zrobisz z nich jednej ogólnej? Trait jest fajny ale trzeba go trzymać w ryzach inaczej potrafi zrobić śmietnik.

0

W kodzie, na którym pracuję mamy podobny problem, serwis był pisany początkowo w ZF1 i w miarę upływu lat wypięliśmy praktycznie cały framework poprzez rozszerzanie. Tworzysz nową klasę rozszerzającą Zend_Db_Select i z niej korzystasz. Nadpisujesz/dopisujesz klasy, które potrzebujesz i w miarę upływu czasu możliwe, że klasa zenda będzie zupełnie bezużyteczna. Dobrą praktyką jest stworzenie do tego interfejsu z metodami, które tworzysz. Jak za jakiś czas uwidzi ci się zmiana klasy wystarczy, że podepniesz nową zgodną z interfejsem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1