Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [famework] Ouzo framework
piotrooo89
post 28.02.2014, 14:08:52
Post #1


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Została wydana stabilna wersja frameworka Ouzo. Zapraszamy do wypróbowania na http://ouzoframework.org i zgłaszania ewentualnych uwag.


--------------------
Go to the top of the page
+Quote Post
Crozin
post 28.02.2014, 14:14:07
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Podstawowe pytanie: dlaczego miałbym wybrać tego FW zamiast innego, tj. co go wyróżnia spośród innych.
Go to the top of the page
+Quote Post
piotrooo89
post 28.02.2014, 14:47:32
Post #3


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




ORM:
http://symfony.com/doc/current/book/doctrine.html
  1. $product = new Product();
  2. $product->setName('A Foo Bar');
  3. $product->setPrice('19.99');
  4. $product->setDescription('Lorem ipsum dolor');
  5.  
  6. $em = $this->getDoctrine()->getManager();
  7. $em->persist($product);
  8. $em->flush();


Ekwiwalent w Ouzo:

https://github.com/letsdrink/ouzo/wiki/ORM
  1. $product = Product::create(['name' => 'A Foo Bar', 'price' => '19.99', 'description' => 'Lorem ipsum dolor']);


lub

  1. $product = new Product();
  2. $product->name = 'A Foo Bar';
  3. $product->price = '19.99';
  4. $product->description = 'Lorem ipsum dolor';
  5. $product->insert();


lub

  1. $product = new Produc(['name' => 'A Foo Bar', 'price' => '19.99', 'description' => 'Lorem ipsum dolor']);
  2. $product->insert();


-------------------

Doctrine:

  1. $repository = $this->getDoctrine()
  2. ->getRepository('AcmeStoreBundle:Product');
  3.  
  4. $query = $repository->createQueryBuilder('p')
  5. ->where('p.price = :price')
  6. ->setParameter('price', '19.99')
  7. ->orderBy('p.price', 'ASC')
  8. ->getQuery();
  9.  
  10. $products = $query->getResult();


Ouzo:

  1. $products = Product::where(['price' => '19.99'])->order('price ASC')->fetchAll();


Ouzo implementuje wzorzec ActiveRecord.

Ouzo ma wbudowaną obsługę migracji schematu bazy danych.

Posiada bardzo dobre zaplecze do rozwijania aplikacji w oparciu o TDD/BDD (https://github.com/letsdrink/ouzo/wiki/Tests).


--------------------
Go to the top of the page
+Quote Post
fizzlebubble
post 28.02.2014, 14:57:01
Post #4





Grupa: Zarejestrowani
Postów: 272
Pomógł: 28
Dołączył: 13.02.2011

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


Garażowy framework jakich 34535353534534.


--------------------
Nie obrażę się, jeśli za udzieloną pomoc odwdzięczysz się klikając w "Pomógł" :).
Go to the top of the page
+Quote Post
piotrooo89
post 28.02.2014, 15:05:31
Post #5


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Ciężko mi się zgodzić z tą "konstruktywną" krytyką.

Framework mający ponad 800 commitów, ponad 13 000 linii kodu, 5 contributorów, w 85% pokryty testami i używany aktualnie produkcyjnie u kilkudziesięciu klientów można nazwać garażowym.

//EDIT
Stats: http://www.ohloh.net/p/ouzo
Powód edycji: [piotrooo89]:


--------------------
Go to the top of the page
+Quote Post
Spawnm
post 28.02.2014, 15:11:53
Post #6





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Cytat(Crozin @ 28.02.2014, 14:14:07 ) *
Podstawowe pytanie: dlaczego miałbym wybrać tego FW zamiast innego, tj. co go wyróżnia spośród innych.

A co wyróżnia laravela po za wielkim szumem? wink.gif


@piotrooo89 - to ma być alternatywa dla CI czy Symfony? Do kogo kierujesz to narzędzie?
Go to the top of the page
+Quote Post
fizzlebubble
post 28.02.2014, 15:17:17
Post #7





Grupa: Zarejestrowani
Postów: 272
Pomógł: 28
Dołączył: 13.02.2011

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


5 contributorów? Wow... Tworząc projekt komercyjny w jakimś frameworku trzeba założyć, że może potrwać XX lat, nawet jeśli specka mówi inaczej. Nie chcę mi się rozpisywać, wystarczy zapoznać się z pojęciami dług technologiczny i okres wsparcia, dziękuję dobranoc.

Ten post edytował fizzlebubble 28.02.2014, 15:17:32


--------------------
Nie obrażę się, jeśli za udzieloną pomoc odwdzięczysz się klikając w "Pomógł" :).
Go to the top of the page
+Quote Post
piotrooo89
post 28.02.2014, 15:19:20
Post #8


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Cytat(Spawnm @ 28.02.2014, 15:11:53 ) *
@piotrooo89 - to ma być alternatywa dla CI czy Symfony? Do kogo kierujesz to narzędzie?


CI osobiście nie wiem jak wygląda. Niemniej dla Symfony i jego ociężałego ORM'a, braku łatwego testowania napisanego kodu jak najbardziej. A narzędzie skierowane do osób znających Rails'y, rozwijających aplikacje za pomocą metodologi TDD/BDD. Ale nie widzę powodu dla którego każdy nie miałby spróbować.


--------------------
Go to the top of the page
+Quote Post
fizzlebubble
post 28.02.2014, 15:29:04
Post #9





Grupa: Zarejestrowani
Postów: 272
Pomógł: 28
Dołączył: 13.02.2011

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


To ostatnie pytanie jako, że jestem devem Railsów, dlaczego miałbym wybrać ten FW skoro znacznie szybciej, lepiej i sprawniej napiszę to w Railsach? :-) Jedynym 'podobieństwem' jest ORM, więcej nie dostrzegam.


--------------------
Nie obrażę się, jeśli za udzieloną pomoc odwdzięczysz się klikając w "Pomógł" :).
Go to the top of the page
+Quote Post
piotrooo89
post 28.02.2014, 15:49:17
Post #10


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Cytat(fizzlebubble @ 28.02.2014, 15:29:04 ) *
To ostatnie pytanie jako, że jestem devem Railsów, dlaczego miałbym wybrać ten FW skoro znacznie szybciej, lepiej i sprawniej napiszę to w Railsach? :-) Jedynym 'podobieństwem' jest ORM, więcej nie dostrzegam.


Ouzo powstało jako alternatywa Railsów do PHP bo nie było czegoś takiego. Skoro ktoś może używać RoR, bo to dla niego najlepsza opcja to oczywiste że należy ich używać, niektórzy z różnych powodów muszą zostać przy PHP. Zapewniam Cie że podobieństw jest więcej (migracje, testy).


--------------------
Go to the top of the page
+Quote Post
fizzlebubble
post 28.02.2014, 16:21:46
Post #11





Grupa: Zarejestrowani
Postów: 272
Pomógł: 28
Dołączył: 13.02.2011

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


Migracje to już akurat podciągnąłbym pod ActiveRecord tongue.gif. Nie wiem czy jest taki sens pisać "Yet another testing suite", skoro większość PHPowców używa jednak PHPUnita. Nie zrozum mnie źle, jestem pełny podziwu dla Waszych starań, umiejętności i wiedzy jako dev teamu, ale czy środowisku PHP potrzebuje właśnie kolejnego frameworka? :-)


--------------------
Nie obrażę się, jeśli za udzieloną pomoc odwdzięczysz się klikając w "Pomógł" :).
Go to the top of the page
+Quote Post
phpsucks
post 28.02.2014, 17:00:35
Post #12





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 28.02.2014

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


Cytat(fizzlebubble @ 28.02.2014, 16:21:46 ) *
Migracje to już akurat podciągnąłbym pod ActiveRecord tongue.gif. Nie wiem czy jest taki sens pisać "Yet another testing suite", skoro większość PHPowców używa jednak PHPUnita. Nie zrozum mnie źle, jestem pełny podziwu dla Waszych starań, umiejętności i wiedzy jako dev teamu, ale czy środowisku PHP potrzebuje właśnie kolejnego frameworka? :-)



PHPUnit to kopia pierwszych wersji xUnita. Dla ludzi z doświadczeniem z innych języków (Java, Ruby) używanie PHPUnit to jak podróż w czasie do roku 2004.
Pomimo, że JUnit 4 i PhpUnit dzieli przepaść to w i tak w javie nikt nie używa samego JUnita, zawsze do tego dochodzi np hamcrest, fest-assert, mockito i np guava.

Stan bibliotek tego typu w php jest tragiczny. Pewnie jest to spowodowane tym, że TDD w php nadal raczkuje (rok 2004).

Ouzo to próba wprowadzenia best-practises z innych języków.
Między innymi klasy Arrays i FluentArray, Functions to fasady normalizujące niespójny interfejs funkcji array_xxx. Wzorowane są na jednej z najpopularniejszych bibliotek do javy guavie.
Klasa Strings jest wzorowana na StringUtils z apache commons.
Mock jest inspirowany najpopularniejszą biblioteką do mockowania: mockito (werjsa php Phockito jest ciężka, nie działa z composerem, a kod jest tragiczny i nieutrzymywany).
Assert jest inspirowany biblioteką fest-assertions.

Nie będę wymieniał teraz wszystkiego, odsyłam do dokumentacji, którą staramy się uzupełniać (lub naszych testów, które też służą za dokumentację).

Do kodu Ouzo na bieżąco przenosimy użyteczne klasy z naszych wewnętrznych projektów, więc można się spodziewać nowych ficzerów.

Ten post edytował phpsucks 28.02.2014, 17:06:22
Go to the top of the page
+Quote Post
Crozin
post 28.02.2014, 17:02:45
Post #13





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Ilość linii kodu jest właściwie bez znaczenia, często ten dłuższy pisze się szybciej, łatwiej i lżej jest dbać o niego, także ten argument jest kompletnie nietrafiony.
2. Przykłady, które podałeś nie są ekwiwalentami. Kod w wersji Symfonowskiej/Doctrine'owskiej ma sporo zalet i różnic w działaniu w stosunku do Ouzowych przykładów.
3. Migracje baz danych są wspierane we wspomnianym Doctrine.
4. Na Doctrine świat się nie kończy w temacie ORM-ów. Skoro już jesteśmy przy Symfony podpowiem, że można w nim spokojnie skorzystać z innego. Czy Ouzo radzi sobie z takim czymś? Jak dobrze? Pytam tutaj konkretnie o możliwości podmiany większości z "pobocznych" komponentów frameworka.
5. W temacie TDD nie widzę niczego specjalnego w stosunku do konkurencji.

Cytat
Ouzo powstało jako alternatywa Railsów do PHP bo nie było czegoś takiego.
No, w końcu coś konkretnego. RoR-a nie znam na tyle by być wstanie samodzielnie ocenić czy tak faktycznie jest, ale jeżeli Twój FW ma być jego PHP-owym odpowiednikiem (oczywiście w granicach rozsądku), to jest to w końcu coś co daje mu jakiegokolwiek plusa na tle reszty.

Cytat
Cytat
Podstawowe pytanie: dlaczego miałbym wybrać tego FW zamiast innego, tj. co go wyróżnia spośród innych.
A co wyróżnia laravela po za wielkim szumem?
Nie wiem, nikt niczego takiego mi nie przedstawił, więc nie używam.
Go to the top of the page
+Quote Post
fizzlebubble
post 28.02.2014, 17:26:22
Post #14





Grupa: Zarejestrowani
Postów: 272
Pomógł: 28
Dołączył: 13.02.2011

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


@phpsucks - tak samo w Railsach mało kto używa testsuit'a dostarczanego z Railsami, a skupia się na gemach typu Rspec czy Cucumber, jednakże uważam że marnujecie swój czas i umiejętności na tworzenie kolejnego frameworka skoro moglibyście ulepszyć już jakiś istniejący :-)


--------------------
Nie obrażę się, jeśli za udzieloną pomoc odwdzięczysz się klikając w "Pomógł" :).
Go to the top of the page
+Quote Post
piotrooo89
post 28.02.2014, 18:46:05
Post #15


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Cytat(Crozin @ 28.02.2014, 17:02:45 ) *
1. Ilość linii kodu jest właściwie bez znaczenia, często ten dłuższy pisze się szybciej, łatwiej i lżej jest dbać o niego, także ten argument jest kompletnie nietrafiony.


Chyba sam sobie zaprzeczasz trochę jeśli o coś jest łatwiej dbać to ja biorę to w ciemno bo utrzymam to w porządku.

Cytat(Crozin @ 28.02.2014, 17:02:45 ) *
2. Przykłady, które podałeś nie są ekwiwalentami. Kod w wersji Symfonowskiej/Doctrine'owskiej ma sporo zalet i różnic w działaniu w stosunku do Ouzowych przykładów.


Czy mógłbyś powiedzieć coś więcej na ten temat? Bo wydaje mi się że ten kod dodaje rekord do bazy danych, dokładnie tak jak w Ouzo.

Cytat(Crozin @ 28.02.2014, 17:02:45 ) *
3. Migracje baz danych są wspierane we wspomnianym Doctrine.


Rzeczywiście, są - niestety nie wiem jak działają nie korzystałem więc na ten temat nie mogę się wypowiedzieć.

Cytat(Crozin @ 28.02.2014, 17:02:45 ) *
4. Na Doctrine świat się nie kończy w temacie ORM-ów. Skoro już jesteśmy przy Symfony podpowiem, że można w nim spokojnie skorzystać z innego. Czy Ouzo radzi sobie z takim czymś? Jak dobrze? Pytam tutaj konkretnie o możliwości podmiany większości z "pobocznych" komponentów frameworka.


Właśnie po to zrobiony jest built-in ORM aby nie trzeba było korzystać z pobocznych ORM'ów. Jednak wsparcie do tego typu rzeczy, jeśli są one dodawane przez composer jak najbardziej jest ale na poziomie aplikacji.

Cytat(Crozin @ 28.02.2014, 17:02:45 ) *
5. W temacie TDD nie widzę niczego specjalnego w stosunku do konkurencji.


Nie widziałem aby ktokolwiek miał TestCase do bazy danych, takie które w pełni pomagają przetestować model bez konfigurowania miliarda rzeczy (napisałem inżynierkę w Zendzie i poświęciłem sporo czasu aby testować model).


--------------------
Go to the top of the page
+Quote Post
destroyerr
post 28.02.2014, 19:16:14
Post #16





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Jak zwykle bywa przy takiej dyskusji co jest lepsze co jest gorsze pojawiają się bzdurne przykłady wyższości jednego nad drugim. Nie wiem czy to brak wiedzy czy też celowe działanie.
Cytat
Niemniej dla Symfony i jego ociężałego ORM'a

Symfony2 jak i poprzednia wersja nie ma ORMa, więc nie wiem co jest dla Ciebie ociężałe. Dodam, żeORM nie jest jedyną możliwością implementacji modelu w aplikacji, zwłaszcza jeśli utrwalanie odbywa się w API, to też nie jest wymagany przez framework.
Cytat
braku łatwego testowania napisanego kodu jak najbardziej.

To chyba żart skoro napisałeś to w tym samym zdaniu z Symfony2. Tylko proszę nie licytujmy się, że coś jest wygodniejsze bo zabiera mniej lub więcej linijek. Dorzucając do tego istnienie Behata to już kompletnie nie rozumiem o co Ci chodzi.

Jeżeli porównujesz Ouzo do Doctrine2 to ok. Pokaż mi jak zaimplementować Value Objects? Jak wykonać mapowanie typów danych z PostGIS? Dużo czasu zajmie mi podmiana na jakiś silnik NoSQL?

Fajnie, że Wam się chciało. Fajnie, że postanowiliście pochwalić się tym, dobrze wiedząc, że spadnie na Was głównie krytyka. Pytanie czy nie było lepiej skorzystać z gotowych bibliotek (logger, shell itd.)? Oprzeć się na dostępnych już rozwiązaniach dodając swoje pomysły?
Jeszcze jedno mi się przypomniało: jeśli chcę skorzystać z klasy Ouzo\Utilities\Strings to koniecznie cały framework muszę pobierać czy przewidujecie podzielić to na kawałki?

Ten post edytował destroyerr 28.02.2014, 19:18:31
Go to the top of the page
+Quote Post
Crozin
post 28.02.2014, 19:46:18
Post #17





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
Chyba sam sobie zaprzeczasz trochę jeśli o coś jest łatwiej dbać to ja biorę to w ciemno bo utrzymam to w porządku.
Nigdzie sobie nie zaprzeczyłem. Napisałem tylko, że niejednokrotnie bardziej obszerny kod (pod względem linii) pisze się szybciej i jest go łatwiej utrzymać w porządku. Odniosłem wrażenie, że próbowałeś pokazać zwięzłość kodu Twojego ORM-a jako zaletę - co w tym konkretnym przypadku raczej ją nie jest.
Cytat
Czy mógłbyś powiedzieć coś więcej na ten temat? Bo wydaje mi się że ten kod dodaje rekord do bazy danych, dokładnie tak jak w Ouzo.
Masz rację, oba kody mają docelowo dodać nowy obiekt do bazy i zapewne robią to podobnie. Jednak ten Doctrine'owy napisany jest z uwzględnieniem zestawu zasad SOLID czyli nie będzie rzucać kłód pod nogi przy próbie zrobienia czegokolwiek co nie jest wręcz do bólu szablonowe. Zwróć uwagę na to, że w Twoim kodzie nie wykorzystam dobrodziejstw IDD, nie rozszerzę kodu poprzez podpięcie zdarzenia, nie zastąpię Twojej klasy Ouzo\Db\QueryExecutor swoją, która robiłaby jakieś dodatkowe rzeczy, długo by jeszcze wymieniać...
Cytat
Właśnie po to zrobiony jest built-in ORM aby nie trzeba było korzystać z pobocznych ORM'ów. Jednak wsparcie do tego typu rzeczy, jeśli są one dodawane przez composer jak najbardziej jest ale na poziomie aplikacji.
Doprecyzuję swoje pytanie: czy jeżeli będę miał taką zachciankę by podpiąć do projektu ORM Doctrine czy inny XYZ, czy po napisaniu kilku adapterów/sterowników i zmianie konfiguracji będę wstanie z niego korzystać z innymi komponentami FW, przykładowo obsługą formularzy lub walidacją?
Cytat
Nie widziałem aby ktokolwiek miał TestCase do bazy danych, takie które w pełni pomagają przetestować model bez konfigurowania miliarda rzeczy (napisałem inżynierkę w Zendzie i poświęciłem sporo czasu aby testować model).
Zapewne dlatego, że napisanie testów wykorzystujących bazę danych to już zadanie programistów aplikacji, a nie frameworka.

Nie zrozum mnie źle, zapewne na Wasze potrzeby jest do dobre narzędzie i spisuje się jak powinno. Jednak jeżeli nie wprowadza ono niczego ciekawego/nowego/dobrego-z-innych-platform to niestety pochwał zbierać nie będzie. wink.gif
Go to the top of the page
+Quote Post
aniolekx
post 6.03.2014, 08:42:58
Post #18





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

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


a dlaczego nie wykorzystacie http://redbeanphp.com/ ?
Go to the top of the page
+Quote Post
!*!
post 6.03.2014, 12:08:59
Post #19





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


@aniolekx - nie jestem zwolennikiem ORM w jakiejkolwiek postaci, choć doceniam logikę niektórych narzędzi, ale to co zaproponowałeś jest po prostu mocno popieprzone, gdzie w tym wszystkim jest "easy" ze sloganu?

@piotrooo89 - dobra robota, witamy w gronie ludzi potrafiących napisać solidny framework. Ciekawe ile jest ich na forum, naliczyłem 3... a w Polsce?


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Spawnm
post 6.03.2014, 12:33:44
Post #20





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




@!*! - http://forum.webmastah.pl/topic/2769-polskie-frameworki-php/ wink.gif
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 09:32