2010-04-24 11 views
18

Obecnie analizuję QtQuick (Qt User Interface Creation Kit), który zostanie wydany jako część Qt 4.7. QML jest językiem deklaratywnym opartym na języku JavaScript za QtQuick.Jakie są rzeczywiste zalety języków deklaratywnych, takich jak XAML i QML?

Wydaje się być bardzo silny pojęcie, ale zastanawiam się, czy ktoś to robił szerokie zastosowanie innych, bardziej dojrzałych języki deklaratywne-UI jak XAML w WPF lub Silverlight może dać żadnego wglądu w korzyściach rzeczywistych że można uzyskać z tego stylu programowania. Różne zalety są często cytowane:

  • Szybkość rozwoju
  • Siły oddzielenie prezentacji i logiki
  • Lepsza integracja między programistów i projektantów
  • zmiany UI nie wymagają ponownej kompilacji

Czy są jakieś wady? Kilka potencjalnych obszarów zainteresowania wiosny do umysłu:

  • szybkość realizacji
  • Użycie pamięci
  • Dodano złożoność

Czy są jakieś inne względy, które powinny być brane pod uwagę?

+1

XAML zapewnia inny styl kodowania wyrażania złożonych relacji hierarchicznych. Gdy połączysz to ze zwykłymi rozszerzeniami znaczników, otrzymasz niezwykle rozbudowany system do konstruowania i powiązania obiektów w zwięzły sposób. –

+0

Właśnie rozpoczynam czytanie tej dyskusji. Xaml i Qml to po prostu reinventions starych plików zasobów oryginalnie opracowanych na Macu i trafiły do ​​Windowsa. XML obecnie wypada z łaski u niektórych osób, które wolą Json, który jest jeszcze bardziej podobny do formatu pliku zasobów. Wracając do dnia, zanim wskaniki poleceń wyszły z jaskini UNIX-a, mieliśmy GUI, które ukrywały format pliku od ciebie. Nikt nie narzekał na to, ponieważ po prostu zadziałało. Zabawne, im więcej rzeczy się zmienia, tym bardziej pozostają takie same. –

Odpowiedz

13

(Aktualizacja)

Błędne z XAML jest to, że nie jest skompilowany. W rzeczywistości jest on skompilowany do BAML-a binarnie z pre tokenem XAML. Najwyraźniej istniała wersja XAML skompilowana przez IL, zwana także CAML. OP wskazał mi na to, good article wyjaśniając czym są XAML/BAML i CAML.

W każdym razie, na pytanie dlaczego z niego korzystać:

XAML jest po prostu format serializacji dla C# obiektów, które jest szczególnie dobrze nadaje się do opisania hierarchicznych struktur obiektowych, jak znaleźć w WPF GUI.

Co WPF pozwala zrobić, to napisać mniej nudny kod C# tak:

var grid = new Grid(); 
grid.Content.add(new TextBlock() {Text = "Hello"}); 
grid.Content.add(new TextBlock() {Text = "World"}); 

i po prostu wyrazić w bardziej czytelny sposób jak ten:

<Grid> 
    <TextBlock Text="Hello"> 
    <TextBlock Text="World"> 
</Grid> 

Ponieważ WPF obiektowo gniazdowania (oddanie rzeczy wewnątrz innych obiektów) może być bardzo głęboka, WPF znacznie ułatwia czytanie niż wynikowy kod C#.

Jeśli chodzi o oddzielenie obaw: XAML pomaga również tutaj, ponieważ pozwala tylko wyrazić obiekty i ich relacje/właściwości, a nie logikę. To zmusza do oddzielenia logiki od układu interfejsu użytkownika. Wzorzec MVVM bardzo dobrze nadaje się do tego zadania i umożliwia testowalność ewaluacyjną oraz wymienne widoki.

Dodatkową złożoność w XAML można również łatwo usunąć, ponieważ ten sam kod w języku C# jest łatwiejszy w użyciu niż znaczniki XAML.

Nie mogę jednak podać żadnego wglądu w QTQuick. Przepraszam

+1

Czy jesteś tego pewien? Rozumiem, że XAML został skompilowany do pośredniego formatu binarnego (BAML). Szybkie Google wydaje się potwierdzać, że tak jest: http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/05/25/Compiled-XAML-_3D00_-BAML-not-IL.aspx –

+0

Cholera, masz rację. Odpowiem natychmiast odpowiedź. Sądziłem, że dokonują deserializacji na IL (opierałem swoje założenia na WPF Unleashed, gdzie tłumaczą, że XAML to tylko format serializacji obiektów C#). Przypuszczam, że MS ma dobre powody, aby skompilować go do baml (nadal skompilowany format binarny, jeśli rozumiem poprawnie), zamiast formatu XML, który musi zostać przeanalizowany. Ale masz rację, jest nieco wolniejszy niż czysty IL. – Tigraine

7

Punktem kodowania deklaratywnego, tj. WPF lub QTQuick, jest zapewnienie separacji między programistą i prawdopodobnie artystą wdrażającym wizualne aspekty aplikacji. Jeśli chodzi o WPF, uważam, że debugowanie staje się nieco trudniejsze. Kiedy mówimy, kompiluję najnowszą QT, by spojrzeć na QTQuick. (To zajmuje dużo czasu i mam czas, aby spojrzeć na stackoverflow :-)) Więc nie mam jeszcze na ten temat opinii.

+0

W jaki sposób debugowanie staje się trudniejsze? Zgadzam się, że wyjątki, które otrzymujesz są nieco trudniejsze do debugowania, ale te nie powinny się zdarzyć, ale będą obsługiwane przez Twój kod i objęte testami jednostkowymi. Cały punkt WPF + MVVM polega na umożliwieniu testowania logiki GUI bez potrzeby debugowania. – Tigraine

+0

Teoretycznie tak. Ale w praktyce, kiedy umieszczasz swój kod i interfejs, razem, wydaje się, że wyjątki są odrzucane z kodu UI, gdy problem jest rzeczywiście w logice biznesowej. Odkrywam, że kompilator również będzie mylić i zgłaszać błędy w lokalizacjach błędów. Myślę, że tylko doświadczenie pokonuje tego rodzaju problemy. – Michael

+0

@ Tigraine, debugowanie, ponieważ WPF wykonuje wiele pracy w wątkach w tle. Kiedy jedna z tych wątków zgłasza wyjątek, otrzymujesz tylko ślad stosu, który jest bezużyteczny przy identyfikacji źródła błędu. – mikerobi

8

QtQuick jest rozszerzalny przez wtyczki C++, w rzeczywistości to, co poleca Qt guys, to że robisz interfejs użytkownika, animacje, przejścia itp. W QtQuick/QML, podczas gdy cała twoja logika biznesowa jest w C++/Qt. W ten sposób uzyskasz to, co najlepsze z obu światów, możesz debugować swój kod w C++, tak jak zwykle, a jednocześnie tworzyć interfejsy użytkownika bez wysiłku i niezwykle łatwe.

Kolejną ważną myślą o QtQuick/XAML jest to, że są przyspieszane sprzętowo, więc na przykład można uzyskać całkiem niezły obraz bez żadnego wysiłku. Nie są więc powolne w tym, co zamierzali osiągnąć.

Oszczędza czas, dużo czasu. Zrobiłem UI z kodem w 3 dni, zrobił to samo w QML w 2 godziny.

+0

Nie jestem pewien, czy qt quick jest przyspieszane sprzętowo. Wskaż mi link do linku –

+1

Prosty fakt uruchomienia animacji demo kafelków na 3-letnim telefonie Nokia i zobacz, jak gładko udowadnia, że ​​jest sprzętowo przyspieszany :) –

+1

RémyDAVID: QML zawsze może używać przyspieszania sprzętowego, biorąc pod uwagę, że 3-letni telefon Nokia nie miał żadnego sprzętu do przyspieszania grafiki, QML nie mogła ci w tym pomóc. DrDeo Oto kilka linków: http://developer.qt.nokia.com/wiki/Support_for_Symbian http://labs.qt.nokia.com/2011/10/03/chasing-the-raspberry-pi -dragon-opengl-es2-accelerated-qt-pi/ http: // juhaturunen.com/blog/2010/12/how-to-enable-hardware-accelerated-qml-rendering/ http://www.raspberrypi.org/ ma kilka filmów z QML hw przyspieszonych na tablicy 25 $ –

5

QML/XAML są:

  • Doskonały do ​​wzorca MVVM
  • Hardware przyspieszone (QML z użyciem OpenGL dla Windows, Mac, Linux i telefonów poniekąd ... XAML z użyciem DirectX dla Windows i jego telefon wersja)
  • Bliżej artystów
  • można tworzyć wielkie i ładne UI przy użyciu XAML/QML
  • realizacja
  • Łatwiejszy UI
  • Nicea animacja jest możliwe
  • W XAML, zwykle można utworzyć Silverlight wersję aplikacji tylko z trochę zmian
  • W XAML istnieje kilka świetnych funkcji, takich jak szablon, Trigger (DataTrigger, spust, EventTrigger) Binding (po dowolnej stronie, a także po obu stronach), Zasoby, Polecenia, Właściwość Dependency i Właściwości podlegające obowiązkowi zgłoszenia.

Ale proszę pamiętać w XAML: (jestem programistą XAML, więc nie mam punktów QML)

  • XAML debugowania nie jest możliwe
  • W przypadku każdej zmiany w XAML, cały program musi Ponowna kompilacja:
  • Zachowaj ostrożność w działaniu. Na przykład, jeśli użyjesz wielu RoutedCommands w XAML, twoja aplikacja będzie bezużyteczna!

  • W XAML niektóre funkcje nie działają zgodnie z oczekiwaniami. Istnieje niestety kilka sztuczek. (Powinno być jasne ... powinien działać zgodnie z oczekiwaniami ... czy nie?)

  • Należy zachować ostrożność w przypadku niektórych podobnych przestrzeni nazw, takich jak BitmapEffect i Effect. Istnieją różne funkcje i koszty. (np. BitmapEffect ma pewne efekty z renderowaniem oprogramowania, a efekt ma pewien efekt z renderowaniem sprzętowym)

  • W świecie rzeczywistym artyści nie mogli używać WPF jako Flash (przynajmniej z dobrą wydajnością).

  • Niektóre funkcje działają w specjalnych miejscach. Na przykład DataTrigger działa tylko w tagu Style, a nie w sekcji zasobów.

  • Istnieje kilka słabych punktów w XAML. Kilka przykładów: nie ma żadnej sekwencyjnej animacji ... nie możesz wykonać żadnych obliczeń w XAML (musisz napisać konwerter w języku C# nawet dla liiiittle pracy! JavaSript jest świetnym zamiennikiem w QML) ... niektóre atrybuty są duplikowane. na przykład x: Nazwa i nazwa ... Kontrolowanie Widok z ViewModel nie jest jasny. na przykład zamykanie Widok z ViewModel (potrzebujesz kodu CodeBehind)

  • Toooooo wiele błędów czasu wykonania. Jeśli użyjesz tagów w złym miejscu, zauważysz błąd składniowy, ale wiele błędów pojawi się właśnie w czasie wykonywania. na przykład jeśli wybieram właściwość tła (zamiast Background.Color) dla ColorAnimation, zostanie skompilowana pomyślnie, ale w uruchomionej animacji ... BUMP ... błąd runtime !!! w takim przypadku na Expression Blend, aplikacja zawiedzie !!!

Powiązane problemy