![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
czesc,
potrzebuje nazwe klasy wywolujacej (czyli get_called_class) tyle ze bez namespace (w php 5.3.x). rozwiazalem to : niby dziala, ale zastanawiam sie czy mozna to inaczej ugryzc, to rozwiazanie wydaje mi sie 'malo eleganckie'... pozdrawiam, jacek. oki, chyba tak by trzeba:
mozna zaorac temat. j. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli już mowa o eleganckości, to wiedz, że jeżeli w ogóle potrzebna Ci ta nazwa, to najprawdopodobniej masz tam coś źle zaprojektowane.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
mhmmm...
raczej za szybko wyciagasz wnioski, zwlaszcza ze masz zbyt malo danych ku temu. najzwyczajniej w swiecie nie korzystam z zadnego frameworka (zbyt specyficzny projekt) tutaj konkretnie potrzebuje zaczytac ustawienia konfiguracyjne dla danego polecenia. jesli znasz lepszy sposob na automatyczne zaladowanie parametrow konfiguracji dla danego polecenia - to z checia wyslucham. j. edit : literowka Ten post edytował alegorn 27.03.2012, 14:30:23 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Nie bez powodu napisałem "najprawdopodobniej".
Cytat tutaj konkretnie potrzebuje zaczytac ustawienia konfiguracyjne dla danego polecenia. Musiałbyś podać więcej informacji n/t tego co tam robisz, a raczej co docelowo chcesz osiągnąć, bo w tej chwili nie da się nic konkretnego polecić. Musisz też objaśnić co rozumiesz przez "polecenie".
jesli znasz lepszy sposob na automatyczne zaladowanie parametrow konfiguracji dla danego polecenia - to z checia wyslucham. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
budujemy api.
po stronie serwera - po odebraniu polecenia, ładuję odpowiednia klasę i sprawdzam poprawność wejściowych parametrów wg konfiguracji to tak w mega skrócie. to zresztą nie ma większego znaczenia - jak napisałem, nie korzystam z żadnego frameworka, więc wszystko piszemy sami. tutaj - jest to nam potrzebne do automatycznego zaczytywania konfiguracji (dlatego potrzebuję nazwy klasy) tak czy inaczej - nie zagłębiając się zbytnio w szczegóły - potrzebowałem powyższego rozwiązania. j. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat to zresztą nie ma większego znaczenia - jak napisałem, nie korzystam z żadnego frameworka, więc wszystko piszemy sami. tutaj - jest to nam potrzebne do automatycznego zaczytywania konfiguracji (dlatego potrzebuję nazwy klasy) To czy korzystacie z jakiegoś ogólnodostępnego FW czy nie nie ma tutaj nic do rzeczy.Ot, po prostu z opisu jaki podałeś wynika, że raczej nie ma tam potrzeby na potworki w postaci metod statycznych o get_called_class nie wspominając. Wykorzystanie normalnych obiektów zamiast metod statycznych niemal zawsze niesie za sobą same korzyści. Cytat jesli znasz lepszy sposob na automatyczne zaladowanie parametrow konfiguracji dla danego polecenia - to z checia wyslucham. Wstrzyknięcie konfiguracji w postaci osobnego obiektu?
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Wstrzyknięcie konfiguracji w postaci osobnego obiektu? wszystko w php da sie zrobic na kilka sposobow, takze taki sposob jak podajesz, ale to juz raczej o krok dalej. tu, do czego to potrzebuje to krok wczesniej : wydobyc odpowiednia czesc konfiguracji z pliku. pewnie dalo by sie to przebudowac w odpowiedni sposob, i owa nazwe przekazywac w parametrach, ale czy to bylo by lepszym rozwiazaniem? w moim odczuciu - nie. byc moze nie mam uprzedzen do 'potworkow statycznych', dla mnie sie liczy by kod dzialal efektywnie, przy minimum zabawy. wstrzykiwanie kodu w tym konkretnym przykladzie wg mojej oceny bylby przerostem formy nad trescia. poza tym, to co teraz budujemy - prawdopodobnie bedzie dzialac ladnych kilka lat, wymagamy wiec wysokiej czytelnosci kodu, a wstrzykiwanie - takim mi sie nie wydaje. j. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat budujemy api [...] poza tym, to co teraz budujemy - prawdopodobnie bedzie dzialac ladnych kilka lat Teraz tu już na pewno trzeba trochę pomyśleć nad prawidłową architekturą. Kod będzie przez te lata ewoluować, będzie musiał zostać pokryty testami jednostkowymi (a te bardzo nie lubią czegokolwiek statycznego; w ogóle dla OOP - jako paradygmatu - rzeczy statyczne są niezbyt naturalne i wygodne w pracy).Czasami warto chwilę pomyśleć nad projektowanym kodem, by o tym że jest do bani nie doswiedzieć się gdy już będzie działać w środowisku produkcyjnym. (IMG:style_emoticons/default/wink.gif) Mógłbyś napisać o jakiej konfiguracji tutaj mowa, czym ona jest/jak wygląda i dlaczego już teraz potrzebny jest hack w postaci get_called_class() i LSB? Jeżeli podałbyś również docelowe API dla API (czyli w jaki sposób będzie się z niego korzystać) może dałoby się zaproponować inne (w mojej opnii lepsze, bo pozbawione hacków) rozwiązanie. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
za dużo by o tym wszystkim pisać.
mogę powiedzieć ze sprawę naprawdę dobrze przedyskutowaliśmy w zespole, a mamy już doświadczenia w budowie api (choć zawsze w nowym projekcie jest coś nowego;) ) testy jednostkowe? zrezygnowaliśmy z nich na rzecz własnego narzędzia. zadaliśmy sobie pytanie co tak naprawdę nas interesuje. wyszło nam ze: otrzymany zwrot względem wysłanych parametrów. i właśnie to jest tutaj badane. np. testy jednostkowe nie wyłapią, czy ktoś zostawił jakiś śmieć w kodzie (np. echo, print_r, etc) my mamy to od ręki. dodatkowym atutem jest czas, jaki zyskujemy na nie pisaniu unit testow( które i tak nie wystrzegają się błędów logicznych) testy budujemy automatycznie na podstawie pliku konf. monitorujemy takze czas odpowiedzi serwera, jeśli przekroczymy ustalona wartość - szukamy przyczyn/rozwiazan. na dłuższą metę - sprawdza się to o wiele lepiej. mamy elastyczne narzędzie, które sprawdza czy to co zmieniliśmy/zrobiliśmy odpowiada naszym założeniom, w razie potrzeby wskazuje miejsce w którym api nie przeszło testów, a nie jest upierdliwe jak unit testy. decyzja odnosnie przyjecia metody testowania - tez nie byla ad hoc podejmowana, rozwazylismy za i przeciw, i wybralismy najlepsze dla nas rozwiazanie. komunikacja - na chwile obecną komunikacja po sockecie, w przyszłości byc moze socket + REST, to jeszcze jest do przetestowania/zadecydowania. format pliku konfiguracji to array (podobnie jak np zend2). kawalek kodu o ktorym dyskutujemy to:
chyba wystarczajaco jasno dalem odpowiedz ;] j. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat zadaliśmy sobie pytanie co tak naprawdę nas interesuje. Generalnie przy użyciu testów jednostkowych m.in. właśnie to można sprawdzić, ale nie to jest tutaj istotne. Zresztą nic nie stoi na przeszkodzie by używać i jednego i drugiego tam gdzie sprawdzają się najlepiej.wyszło nam ze: otrzymany zwrot względem wysłanych parametrów. i właśnie to jest tutaj badane. Z tych urywków kodu wygląda na to, że korzystasz z metod statycznych do obsługi tych poleceń. Dlaczego nie użyjesz normalnego obiektu, któremu konfiguracji nie przekażesz w konstruktorze? W końcu na etapie tworzenia obiektu znasz jego nazwę, tak więc będzie można bezproblemowo odczytać konfigurację dla niego. Dzięki temu pozbędziesz się tzw. "z dupy" zależności wewnątrz klasy, co pozwoli na zdecydowanie łatwiejsze testowanie (nie tylko przy testach jednostkowych) jak i ewentualną (tu niemal pewną) dalszą rozbudowę kodu. https://www.google.pl/search?aq=2&oq=wh...methods+are+bad https://www.google.pl/search?aq=2&oq=wh...riables+are+bad |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 02:22 |