Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

53 Stron V   1 2 3 > » 

Crozin
Napisane: 9.03.2018, 13:14:34





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

1. Nie każda warstwa abstrakcji będzie powodowała spowolnienie, jeżeli np. sama w sobie potrafi coś optymalizować, co normalnie by optymalizowane nie było - np. Second-Level Cache z Doctrine'a.
2. Ilość danych w bazie nie ma dla samego Doctrine'a specjalnego znaczenia.
3. Znaczenie będzie miała natomiast liczba wyciąganych przez dane zapytanie danych. Przetworzenie przykładowo 100 000 rekordów z bazy danych przy pomocy "czystego PHP-a" może być znacząco szybsze niż zrobienie tego z wykorzystaniem Doctrine'a ze względu na powolność PHP-a w tworzeniu obiektów jako takich.
4. Musisz sprawdzać jakie zapytania SQL finalnie generuje Doctrine. A że pracując z ORM-em często łatwo się zapomnieć w tym aspekcie stąd opinia n/t "powolnych ORM-ów".
  Forum: Bazy danych · Podgląd postu: #1230360 · Odpowiedzi: 3 · Wyświetleń: 570

Crozin
Napisane: 13.11.2017, 13:25:22





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Cytat
Nie da się generalnie odpowiedzieć na pytanie: Jak poprawnie w klasie użyć (np) 5 różnych obiektów?
Na takie pytanie można odpowiedzieć jedynie mając kontekst konkretnego przypadku. smile.gif
Cytat
Bo rozumiem, że poprawnie byłoby wstrzykiwać instancje jako parametry konstruktora (Dependency Injection), ale tu też książka mówi, że nie ładnie mieć wiele argumentów.
I generalnie rzecz biorąc ta książka bardzo dobrze mówi. Co zatem w przypadku, gdy w kontruktorze potrzebowałbym 23 argumentów? Najprawdopodobniej mamy do czynienia ze źle zaprojektowanym obiektem, który próbuje zajmować się zbyt dużą liczbą rzeczy na raz.
Cytat
Jeśli jest to kontroler to tutaj spinasz generalnie wszystko więc ilość zależności może być spora [...]
Kontrolery to dokładnie takie same klasy jak wszystkie inne. Nie powinny spinać wszystkiego, bo co jest do wszystkiego to jest do niczego. ;-) Z jakiegoś powodu da się w sieci znaleźć "odczucia", że kontrolery to jakieś specjalne klasy - nie, nie są w żaden sposób wyjątkowe.
Cytat
W sensie klasa biznesowa raczej powinna po prostu coś zwracać bez większych kombinacji z innymi klasami, a w kontrolerze żongluję tymi klasami biznesowymi. Tak?
Wręcz dokładnie odwrotnie. :-) To własnie klasy/metody z części "logiki biznesowej" potrzebują wykonać całą ciężką pracę w programie, więc to w nich znajdziemy sporo zależności. Inną kwestią jest to, że nadal trzeba trzymać się zasady - im mniej zależności tym lepiej.

W skrócie: musiałbyś podać konkrety przypadek do omówienia (code review) nawet w jakimś pseudokodzie, bo tak to będziemy prowadzić akademicki wywdów. smile.gif
  Forum: Przedszkole · Podgląd postu: #1224515 · Odpowiedzi: 7 · Wyświetleń: 193

Crozin
Napisane: 16.10.2017, 09:18:05





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

1. JavaScriptu nie Javy.
2. Od razu polecam zaznajomić się z biblioteką RxJS - jest idealna do tego typu zadań.
3. Powyższy kod jest raczej słabej jakości, nie jest to najlepszy przykład do wzorowania się.
4. Jestem całkiem pewien, że część z tego kodu rozumiesz. Napisz dokładnie co jest niejasne.
  Forum: JavaScript · Podgląd postu: #1223128 · Odpowiedzi: 5 · Wyświetleń: 557

Crozin
Napisane: 13.09.2017, 07:03:45





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Tutaj niestety wychodzi porównanie wydajności pomiędzy kodem napisanym w C + PHP (wbudowany moduł od obsługi XML w C wykorzystywany przez API w PHP) konta czyste PHP. Co tu dużo mówić, PHP jest wolny. Co możesz zrobić?
1. Upewnij się, że korzystasz z PHP 7.x nie 5.x - jest zauważalnie szybszy, ale na pewno nie zniweluje Ci to różnicy.
2. Poszukaj jakiegoś prasera, który został napisany jako moduł w C dla PHP. Wtedy powinieneś uzyskać czasy takie jak w przypadku XML-a. Przy czym nie mam pojęcia czy takowy istnieje.
3. To już jest obejście, nie rozwiązanie problemu:
3.a. Przy pomocy zewnętrznego, wydajnego softu konwertuj sobie JSON do XML przed przetworzeniem.
3.b. W ogóle skorzystaj z innej platformy.

  Forum: PHP · Podgląd postu: #1221903 · Odpowiedzi: 5 · Wyświetleń: 300

Crozin
Napisane: 10.07.2017, 12:02:40





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

1. Debugger PHP i po kolei przejść kod wykonywany w ramach EntityManager::flush()?
2. Logi zapytań wysyłanych do bazy danych?
  Forum: Przedszkole · Podgląd postu: #1218845 · Odpowiedzi: 2 · Wyświetleń: 107

Crozin
Napisane: 4.07.2017, 09:59:06





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

1. By SomeUnique2 mogło działać dla klasy musi mieć napisaną metodę getTargets(), która powinna zwrócić self::CLASS_CONSTRAINT.
2. Oż Ty leniuszku... http://api.symfony.com/3.1/Symfony/Compone...tInterface.html :-P (np. getRoot()).
  Forum: Frameworki · Podgląd postu: #1218577 · Odpowiedzi: 4 · Wyświetleń: 441

Crozin
Napisane: 30.06.2017, 07:23:05





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Miejsce przechowywania tego typu zasobów może być przeróżne (lokalny system plików, FTP, usługa składowania plików w AWS-ie/Google-u/Azure-ze/innych, baza danych, itp. itd.) Osobiście mogę polecić KnpGaufretteBundle (integracja dla Symfony z KnpLabs/Gaufrette), które wprowadza całkiem fajną abstrakcję nad faktycznym miejscem składowania zasobów.
  Forum: Frameworki · Podgląd postu: #1218335 · Odpowiedzi: 4 · Wyświetleń: 560

Crozin
Napisane: 29.06.2017, 18:48:38





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

1. Symfony nie ma absolutnie nic do powiedzenia w kwestii przechowywania plików.
2. Jeżeli jest to pojedyczny plik po prostu wrzuć go sobie do jakiegoś katalogu albo wręcz bezpośrednio w folderze publicznym (web, public, public_html czy jakkolwiek się on nazwa).
  Forum: Frameworki · Podgląd postu: #1218324 · Odpowiedzi: 4 · Wyświetleń: 560

Crozin
Napisane: 24.04.2017, 17:22:45





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

W przypadku PHP nie są one może niezbędne jak w niektórych platformach, ale nadal mają kilka zalet.

1. Zamiast wykorzystywać mocki/stuby w testach możesz skorzystać z "głupich implementacji", a w przypadku jakiś usług operujących na zew. zasobach z implementacji operujących w pamięci. Czy to samo da się osiągnąć przy pomocy wspomniach mocków/stubów? Generalnie tak, ale z wygodą często nie ma to nic wspólnego.
2. Rozsądnie zaplanowane interfejsy - czyli takie z małą liczbą metod - pozwalają na zmniejszenie liczby zależnośći. Często można mieć klasę implementującą kilka interfejsów. W momencie gdy testujemy coś wymagającego tylko jednego interfejsu tej klasy zmniejsza się liczba metod które wymagają mocków/stabów.
3. Poleganie na tym, że "dla reszty metod zwracany jest null" jest bardzo niebezpieczne na dłuższą metę i sprawia, że Twoje testy muszą mieć jakąś świadomść wewnętrznej implementacji testowanej klasy - a to lekko negatywnie wpływa na stabilność samych testów.
  Forum: Przedszkole · Podgląd postu: #1214577 · Odpowiedzi: 1 · Wyświetleń: 123

Crozin
Napisane: 15.03.2017, 21:56:59





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Tak nie do końca identyczne: https://www.diffchecker.com/3Tgvzb4D
  Forum: Przedszkole · Podgląd postu: #1212572 · Odpowiedzi: 1 · Wyświetleń: 242

Crozin
Napisane: 30.12.2016, 18:20:46





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Podany fragment kodu z tego bloga to idealny przykład jak kompletnie spartaczyć sobie obsługę i debuggowanie błędów. Tego typu kod to dosłownie same problemy.

Przede wszystkim jeżeli nie masz żadnej możliwości zareagowania na wyjątek, ani możliwości zignorowania go pod żadnym pozorem nie łap go - wyrządzasz sobie w ten sposób jedynie krzywdę. Zauważ, że w tym kodzie:
1. Tracimy informację o miejscu wystąpienia błędu. W linii #8 nie doszło tak na prawdę do żadnego błędu (miało to miejsce w czymś co tutaj kryje się pod komentarzem z linii #4). Tracimy BackTrace'a.
2. Tracimy informację o tym co spowodowało wyjątek - dostaniemy tylko nic nie mówiący ControllerException z komunikatem w stylu "There was an error: Connection TimedOut". Jeżeli jeszcze zapisałby oryginalny wyjątek czy w praktyce zapewne ich całą hierarchię...
3. W kodzie kontrolera, który generalnie powinien kompletnie nie interesować się źródłem danych (baza danych, PDO) musimy tworzyć tego typu zależność.

I jeszcze odnośnie Twoich wcześniejszych notatek dot. łapania i ponownego rzucania wyjątków.
1. Tak, możesz wyłapać wyjątek zew. biblioteki i opakować go we własny, tylko pamiętaj by przekazać go w parametrze, jako innerException.
2. Jeśli nie jesteś wstanie nic z nim zrobić to nawet nie kombinuj z łapaniem go i ponownym wyrzucaniem bez żadnej pobocznej akcji jak chociażby zalogowanie go - sam to zrobi.

PS. Nie mogę pozwolić sobie teraz na lekturę tego wpisu, ale powyższy fragment spowodował u mnie zapalenie się takiej ostrzegawczej lampki w głowie. ;-)
  Forum: Przedszkole · Podgląd postu: #1207499 · Odpowiedzi: 2 · Wyświetleń: 414

Crozin
Napisane: 30.11.2016, 10:07:16





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

1. Element BUTTON jak najbardziej może być wykorzystywany do wysyłania formularza. Pasowałoby jedynie dodać mu atrybut type=submit.
2. Obecnie można praktycznie zapomnieć o czymś takim jak "wyłączony JS" w normalnego użytkownika.
  Forum: Po stronie przeglądarki · Podgląd postu: #1205490 · Odpowiedzi: 10 · Wyświetleń: 936

Crozin
Napisane: 22.08.2016, 10:26:41





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Kod HTML to zwykły tekst i nie ma on żadnego znaczenia ani dla bazy danych, ani dla PHP-a. Zapisuj go normalnie, tj. w surowej niezmienione formie. Jeżeli te dane chcesz później wyświetlić w na stronie w HTML-u musisz zadbać o to by nie został on zinterpretowany jako HTML, czyli wykorzystać htmlspecialchars.
  Forum: Przedszkole · Podgląd postu: #1198490 · Odpowiedzi: 6 · Wyświetleń: 140

Crozin
Napisane: 2.07.2016, 09:10:37





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Zapewne chodzi tutaj o zbiór kilku technik/narzędzi wykorzystywanych w ramach Symfony, które pozwalają na dodawanie (bądź usuwanie) pewnych zachowań. Trochę ciężko bez szerszego kontekstu to wyciągnąć. Czym będą te narzędzia? Przede wszystkim:
1. Zdarzenia, które rzuca sam FW, np. od obsługi żądania HTTP czy formularzy.
2. Konfiguracja kontenera wraz z poprawnie utworzonymi usługami (IoC / wykorzystanie interfejsów), pozwala bardzo często na podmianę tylko drobnego kawałka logiki, która nas interesuje.
3. Tagi w kontenerze zależności.
  Forum: Przedszkole · Podgląd postu: #1195264 · Odpowiedzi: 1 · Wyświetleń: 236

Crozin
Napisane: 20.06.2016, 15:22:58





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

W skrócie: tak - test musi skądś wiedzieć jaka wartość jest uznawana za odpowiednią/wzorcową.
  Forum: Object-oriented programming · Podgląd postu: #1194511 · Odpowiedzi: 7 · Wyświetleń: 1 859

Crozin
Napisane: 9.06.2016, 19:41:41





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

W takim przypadku nie ma takiej potrzeby, ale dla czytelności lepiej jest albo wykonywać importować przestrzeń albo wykorzystywać "odwołanie globalne" z ukośnikiem na początku.
  Forum: Przedszkole · Podgląd postu: #1193801 · Odpowiedzi: 5 · Wyświetleń: 349

Crozin
Napisane: 9.06.2016, 14:45:47





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Dodaj modyfikator u do wyrażenia: http://ideone.com/XZ7KVj
  Forum: Przedszkole · Podgląd postu: #1193771 · Odpowiedzi: 12 · Wyświetleń: 812

Crozin
Napisane: 10.06.2016, 07:36:12





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Możesz spróbować wyrzucić odwołania do nieszczęsnej klasy statycznej do pośredniczącego obiektu.
  1. class Config {
  2. public static get(...);
  3. public static set(...);
  4. }
  5.  
  6. interface ConfigProviderInterface {
  7. public get();
  8. public set();
  9. }
  10.  
  11. // implementacja wykorzystywana w normalnym kodzie
  12. class StaticConfigProvider implements ConfigProviderInterface {
  13. public get() {
  14. return Config::get(...);
  15. }
  16.  
  17. public set() {
  18. Config::set(...);
  19. }
  20. }
  21.  
  22. // implementacja wykorzystywana w testach
  23. class ArrayConfigProvider implements ConfigProviderInterface {
  24. private $config;
  25.  
  26. public get() {
  27. return $this->config[...];
  28. }
  29.  
  30. public set() {
  31. $this->config[...] = ...;
  32. }
  33. }
  34.  
  35. class MyClass {
  36. private $config;
  37.  
  38. public __construct(ConfigProviderInterface $config) {
  39. $this->config = $config;
  40. }
  41.  
  42. public doSth() {
  43. return 'abc' . $this->config->get(..);
  44. }
  45. }
  46.  
  47. // ---- TESY:
  48.  
  49. $config = new ArrayConfigProvider([....]);
  50. $class = new MyClass($class);
  51.  
  52. $this->assertEquals('abc123', $class->doSth());
  Forum: Przedszkole · Podgląd postu: #1193826 · Odpowiedzi: 7 · Wyświetleń: 296

Crozin
Napisane: 2.06.2016, 13:04:45





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

array_count_values
  Forum: Przedszkole · Podgląd postu: #1193244 · Odpowiedzi: 2 · Wyświetleń: 113

Crozin
Napisane: 2.06.2016, 07:21:54





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

https://developer.mozilla.org/en-US/docs/We...bjects/Math/pow
[JAVASCRIPT] pobierz, plaintext
  1. Math.pow(-7, 0.5); // NaN (negative numbers don't have a real square root)
  2. // due to "even" and "odd" roots laying close to each other,
  3. // and limits in the floating number precision,
  4. // negative bases with fractional exponents always return NaN
  5. Math.pow(-7, 1/3); // NaN
[JAVASCRIPT] pobierz, plaintext
  Forum: JavaScript · Podgląd postu: #1193224 · Odpowiedzi: 3 · Wyświetleń: 494

Crozin
Napisane: 5.04.2016, 07:14:33





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Na dobrą sprawę kod Symfony z Twoim kodem nie ma styczności, więc bez znaczenia jaki styl sobie obierzesz. Ten forsowany przez Symfony jest całkiem sensowny, jednak również ma swoje ułomności - które wymieniłeś.

1. Przecinek po ostatnim elemencie był zawsze dla mnie kompletnie niezrozumiały. Nie daje on w praktyce absolutnie niczego, nie jest też jakiś "ułatwieniem" dla automatów modyfikujących kod. Innymi słowy jest kompletnie zbędny.
2. Yoda Conditions... zamiast z takiego potworka korzystaj zawsze (może poza wyjątkowymi sytuacjami) z operatora identyczności (===) zamiast równości (==). Zmienne i tak zawsze powinny mieć jeden znany typ. === już nie da się pomylić z =, zresztą tego typu wpadka i tak momentalnie Ci się objawia niedziałającym systemem/testami.
  Forum: Hydepark · Podgląd postu: #1189145 · Odpowiedzi: 4 · Wyświetleń: 649

Crozin
Napisane: 23.03.2016, 12:54:26





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Cytat
ale nie wiem czemu do bazy nie zostal dodany rekord do tabeli Type o match_id = 3 tylko o match_id = 41 (zainkrementowalo mi match_id )
Zapewne dla właściwości @Id masz ustawione automatyczne generowanie wartości (@GeneratedValue(AUTO)). Wtedy Doctrine zignoruje ręcznie ustawioną wartość przez setId(x).
Cytat
nie ma takiej metody w mojej encji Match jak setId()
to chyba nie tak sie robi ...
Jeżeli decydujesz się na ręczne bądź półautomatyczne (np. przy pomocy sekwencji) nadawanie ID-ków, to taką metodę setId() jak najbardziej możesz czy wręcz musisz mieć. Generalnie nawet jeżeli ID-ki generowane są wyłącznie przez bazę danych metoda setId() wiele nie wadzi, a przy pisaniu testów może się przydać.
Cytat
zastanawia mnie tylko dlaczego kolega wczesniej prosil/ostrzegal zeby zapisu nie robic w konrolerze (IMG:style_emoticons/default/smile.gif) ... rozumiem ze chodzi o ograniczenie linii kodu ?
Liczba linii kodu jest bez znaczenia. Chodzi po prostu o to, że kontroler to nie miejsce dla ORM-a, który raczej powinien być użyty dopiero gdzieś głęboko w warstwie przetwarzania danych, czy właściwie dostępu do danych. Ale nie zawsze potrzebujemy takiej separacji kodu, na różne warstwy stąd Symfony udostępnia "łatwy" dostęp do Doctrine'a wewnątrz kontrolerów dziedziczących po Symfony\Bundle\FrameworkBundle\Controller\Controller.
  Forum: Frameworki · Podgląd postu: #1188255 · Odpowiedzi: 10 · Wyświetleń: 411

Crozin
Napisane: 11.03.2016, 15:04:08





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

https://github.com/twbs/bootstrap/blob/mast...ables.less#L325 - tutaj masz zdefiniowaną zmienną z liczbą kolumn - musiałbyś ją zmienić na 16 i skompilować sobie Bootstrapa.

Edit: Czyli dokładnie to co @Pyton_000 podesłał.
  Forum: Przedszkole · Podgląd postu: #1187202 · Odpowiedzi: 3 · Wyświetleń: 213

Crozin
Napisane: 2.03.2016, 09:40:42





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Przy liczbie raptem kilkudziesięciu tysięcy nie powinieneś mieć żadnych problemów z wydajnością. Powinieneś skupić się na poprawnej strukturze bazy.
1. Artykuły, kategorie i autorzy to osobne obiekty więc powinny być w osobnych tabelach.
2. Kategorie i podkategorie to jak domyślam się dokładnie ten sam typ obiektu jedynie w strukturze drzewiastej - powinno być w jednej tabeli. Co do samego drzewka w sieci jest od groma informacji na ten temat.
3. Artykuły i kategorie są powiązane klasyczną relacją wiele-do-wielu więc będziemy mieli dodatkową tabelę wyłącznie na potrzeby tej relacji, tak jak podałeś.
4. Jeżeli będziesz chciał wyszukiwać artykuły nie "w jednej z n kategorii" tylko "będące we wszystkich n kategoriach" od razu zapisz sobie w zakładkach mój post z innego wątku z dzisiaj: http://forum.php.pl/index.php?s=&showt...t&p=1186255
  Forum: MySQL · Podgląd postu: #1186265 · Odpowiedzi: 5 · Wyświetleń: 377

Crozin
Napisane: 29.02.2016, 22:55:50





Grupa: Zarejestrowani
Postów: 6 471
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----

Warto też zaznaczyć, że sekwencja może być wykorzystana spoza bazy danych - w sumie dosyć popularna technika, gdzie to aplikacja zajmuje się nadawaniem identyfikatorów.
  Forum: PostgreSQL · Podgląd postu: #1186125 · Odpowiedzi: 3 · Wyświetleń: 2 462

53 Stron V   1 2 3 > » 

New Posts  Nowe odpowiedzi
No New Posts  Brak nowych odpowiedzi
Hot topic  Popularny temat (Nowe)
No new  Popularny temat (Brak nowych)
Poll  Sonda (Nowe)
No new votes  Sonda (Brak nowych)
Closed  Zamknięty temat
Moved  Przeniesiony temat
 

RSS Wersja Lo-Fi Aktualny czas: 18.07.2018 - 19:02