Czym dokładnie jest Arel w Railsach 3.0?
Jest to model obiektowy dla algebry relacyjnych operatorów zapytań.
Rozumiem, że jest to zamiennik ActiveRecord
Nie, nie jest. Jest to zamiennik ręcznego tworzenia zapytań SQL w łańcuchach. Jest to typowa warstwa zapytań, która leży u podstaw ActiveRecord, ale może być również używana na przykład jako podstawa dla DataMapper.
Jeśli coś zastępuje, zastępuje Ambition. Możesz też myśleć o tym jako o wersji Ruby standardowych operatorów zapytań LINQ lub SQLAlchemy języka Python. (W rzeczywistości autor jawnie cytuje zarówno LINQ, jak i SQLAlchemy jako inspirację).
Lub możesz zobaczyć to jako zamiennik named_scope
s. W rzeczywistości ARel jest w dużej mierze urzeczywistnieniem idei, że „każde zapytanie jest named_scope
”. No i co wiesz: oba zostały napisane przez tego samego faceta.
i że używa obiektów zamiast zapytań.
Nie, używa obiektów jako zapytań.
dlaczego tak jest lepiej
Ruby jest językiem zorientowanym obiektowo, a nie ze zorientowanym na łańcuchy. Z tego powodu sam , ma sens do reprezentowania zapytań jako obiekty zamiast strun. Zbudowanie odpowiedniego modelu obiektowego dla zapytań zamiast używania łańcuchów do wszystkiego daje prawie takie same korzyści, jakie daje zbudowanie odpowiedniego modelu obiektowego dla systemu księgowego zamiast używania łańcuchów do wszystkiego.
Kolejną dużą zaletą jest to, że ARel implementuje rzeczywistą algebrę operatorów zapytań. Innymi słowy, ARel wie o matematycznych zasadach konstruowania i komponowania zapytań. Jeśli połączysz dwa ciągi, z których każdy zawiera prawidłowe zapytanie SQL, wynikiem prawdopodobnie nie będzie prawidłowe zapytanie SQL. Lub, co gorsza, jest to prawidłowe zapytanie SQL, ale takie, które nie ma sensu lub robi coś zupełnie innego niż myślisz, że robi. To nigdy się nie zdarzy w przypadku ARel. (To właśnie oznacza artykuł, do którego odsyłam poniżej, jako „zamknięty w kompozycji”).
czy obiekty / zapytania będą „łatwiejsze” do tworzenia?
Tak. Na przykład, jak wspomniałem powyżej, znacznie łatwiej jest tworzyć bardziej złożone zapytania z prostszych części.
czy doprowadzi to do wydajniejszych zapytań SQL?
Tak. Fakt, że ARel ma odpowiedni model obiektowy dla zapytań, oznacza, że może przeprowadzać optymalizacje tych zapytań na długo przed wygenerowaniem rzeczywistego zapytania SQL.
czy będzie kompatybilny ze wszystkimi głównymi bazami danych? - Zakładam, że tak.
Tak. W rzeczywistości zawsze mówiłem o SQL powyżej, ale w rzeczywistości relacyjna algebra zapytań może generować zapytania dla prawie wszystkiego. Ponownie zobacz LINQ lub Ambition jako przykłady: oba mogą wykonywać zapytania SQL, LDAP, ActiveResource, CouchDB, Amazon, Google,… wszystkie z tą samą składnią.
Być może najlepszą dyskusją na temat tego, czym jest ARel i dlaczego napisał Nick Kallen, jest trafnie nazwany artykuł Why Arel? przez samego Nicka Kallena . Uwaga: artykuł zawiera łagodny żargon matematyczny i informatyczny, ale o to właśnie chodzi: ARel ma mocne podstawy w matematyce i informatyce, to właśnie te podstawy nadają mu potężne właściwości.